简体   繁体   中英

PHP $_POST empty during AJAX post request

Goal: Serialize data, send them in HTTP POST request using AJAX, proceed data in PHP (and answer)

Problem: PHP $_POST variable seems to be empty

JS/AJAX

var postData = [cmd, data];
alert(postData = JSON.stringify(postData));

$.ajax({
   url: "./backendTag.php",
   type: "post",
   data: postData,
   dataType: 'json',
   success: function (response) {
      alert(response); // Empty
      //logToServerConsole(JSON.parse(response));
   },
   error: function(jqXHR, textStatus, errorThrown) {
      logToServerConsole("E3"); // Communication Error
      console.log(textStatus, errorThrown);
   }
});

PHP

<?php echo json_encode($_POST);

The reason for the same is probably because you are not posting properly in javascript. Before i add the codes, let me add a couple of tips on how to debug in these situations.

First is, you check if the request is properly formed. Inspect the network in browser dev tools.

Second method could be to use var_dump on $_POST to list out all the post parameters and check if they have been recieved in PHP

Now as far as the code goes

here is the javascript

$.ajax({
  method: "POST",
  url: "url.php",
  data: { name: "John Doe", age: "19" }
}).done(function( msg ) {
  alert(msg);
});

and in php you can simply check using

<?php
print $_POST["name"];
?>

which would work perfectly. Notice how the data in javascript is a list, while from what you wrote seems to be json string

Apparently we can't pass an array directly after serializing him. The following code resolved the problem. (Split array)

data = JSON.stringify(data);
var JSONdata = {"cmd" : cmd, "data" : data};

$.ajax({
   url: "./backendTag.php",
   type: "post",
   data: JSONata,
   dataType: 'json',

   /* Handlers hidden*/
});

JSON content won't be parsed to the $_POST globals. If you want to reach them, try to get from php://input with:

file_get_contents('php://input')

And I suggest giving the content-type during the ajax request:

contentType: 'application/json',

If it's not working, try to set the data as a string, with JSON.Stringify, like the following:

data: JSON.stringify(postData)

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