I am trying to use the data that AJAX sends in PHP but for some reason says that the array is empty I also don't get any errors from PHP or in my console. the console.log(data) shows the array with with the values of the selects. After the PHP there is HTML where the script.js is.console.logconsole.log
index.php
<?php
error_reporting(-1);
$value1 = "";
$value2 = "";
print_r($_POST);
if (isset($_POST['date']) && isset($_POST['date'])) {
if (isset($_POST['date'])) {
echo "Yes, mail is set";
$value1 = $_POST['date'];
$value2 = $_POST['quantity'];
} else {
echo "No, mail is not set";
}
exit;
}
echo $value1;
echo $value2;
$canmakereservation = "https://www.planyo.com/rest/?method=can_make_reservation&api_key=YOURKEY&resource_id=110556&start_time=2018年04月25日 09:00&end_time=2018年04月25日 12:00&quantity=5";
$cleancanmakereservation = preg_replace("/ /", "%20", $canmakereservation);
$reservationavailable = file_get_contents("$cleancanmakereservation");
$reservationAvailable = json_decode($reservationavailable, true);
// echo "$cleancanmakereservation";
// var_dump($reservationAvailable);
?>
script.js
$(document).ready(function(){
var date = "date";
var begin = "begin";
var eind = "eind";
var aantal = "aantal";
$('#datum').change(function() {
date = $("#datum").val();
console.log(date);
});
$('#beginTijd').change(function(){
begin =( $(this).val() );
console.log(begin);
});
$('#Tijdsduur').change(function(){
eind =( $(this).val() );
console.log(eind);
});
$('#aantalSloepen').change(function() {
aantal = ($(this).val());
console.log(aantal);
$.ajax({
type: "POST",
url: "index.php",
data: {
date: begin,
quantity: aantal
},
success: function(data) {
alert(data);
console.log(data);
}
});
});
});
2 Answers 2
First! There are duplicate conditions isset($_POST['date']) (3 times) in your code:
if (isset($_POST['date']) && isset($_POST['date'])) {
if (isset($_POST['date'])) {
echo "Yes, mail is set";
$value1 = $_POST['date'];
$value2 = $_POST['quantity'];
} else {
echo "No, mail is not set";
}
exit;
}
Second! You should remove exit; and try again!
Third: You should check your variable type, if your $value1 and $value2 is not a string, numeric. echo is false. try with return
EDIT:
Try this, it worked for me! the .php destination:
$value1 = "";
$value2 = "";
if (isset($_POST['date']) && isset($_POST['quantity'])) {
echo "Yes, mail is set";
$value1 = $_POST['date'];
$value2 = $_POST['quantity'];
}
else {
echo "No, mail is not set";
}
echo $value1;
echo $value2;
The ajax:
The result
14 Comments
exit; and changed the secods isset($_POST['date']) to quantity. but don't really understand what you mean by your third point.return instead of echo :)echo in your .php is wrong, your ajax result will be nothingvar_dump() to check your variables before return it !print_r($_POST); to var_dump($_POST) and it says array (size=0) emptyCheck the ContentType header in the AJAX request. It could be that it is being sent as JSON and PHP doesn't deserializer that into the $_POST array. It may need to be sent as serialized form data, like in this example.
In my experience (albeit in .NET), if data isn't being picked out of the request by the server it's usually that the ContentType header isn't set correctly for how you're passing the data so the server doesn't understand how to pull it out.
Edit:
You can control this by setting contentType property in options object passed to $.ajax, the default is apparently 'application/x-www-form-urlencoded; charset=UTF-8' and when you pass an object to the data property, according to the processData property, the default behaviour is to serialize this into a query string, fitting the default contentType. Source: jQuery docs.
So my mistake, looks like that should all be matching up, though I do usually like to be explicit with specifying these properties to avoid any confusion.
4 Comments
contentType in options object passed to $.ajax, the default is 'application/x-www-form-urlencoded; charset=UTF-8' which may not align with the raw object passed in the data property.
exit;in index.php stop the code?if (isset($_POST['date']) && isset($_POST['date'])) {you should probably be testing$_POST['quantity']rather than testingdatetwiceshows empty? I can clearly see the output of thevar_dump()in your console output.dateandquantityfrom your console imagejson.echo. andreturnare equivalent. So it cannot be faulted with string ! except other variable type