在AJAX发布请求期间,PHP$_POST为空


PHP $_POST empty during AJAX post request

目标:序列化数据,使用AJAX在HTTPPOST请求中发送数据,在PHP中处理数据(并回答)

问题:PHP$_POST变量似乎为空

JS/AAJAX

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);

同样的原因可能是您没有正确地使用javascript发布。在添加代码之前,让我添加一些关于如何在这些情况下进行调试的提示。

首先,检查请求的格式是否正确。在浏览器开发工具中检查网络。

第二种方法可以是在$_POST上使用var_dump列出所有POST参数,并检查它们是否已在PHP 中收到

现在就代码而言

这是javascript

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

在php中,您可以简单地使用进行检查

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

这将完美地工作。请注意,javascript中的数据是一个列表,而您所写的似乎是json字符串

显然,我们不能在序列化后直接传递数组。以下代码解决了问题。(拆分阵列)

data = JSON.stringify(data);
var JSONdata = {"cmd" : cmd, "data" : data};
$.ajax({
   url: "./backendTag.php",
   type: "post",
   data: JSONata,
   dataType: 'json',
   /* Handlers hidden*/
});

JSON内容将不会解析为$_POST全局变量。如果你想联系他们,试着从php://input带有:

file_get_contents('php://input')

我建议在ajax请求期间给出内容类型:

contentType: 'application/json',

如果不起作用,请尝试使用JSON.Stringify将数据设置为字符串,如下所示:

data: JSON.stringify(postData)