简体   繁体   中英

php shows empty array but ajax shows the data

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.log console.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);
      }
  });
});
});

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

在此处输入图片说明

Check 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' '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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM