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

时间:2016-05-04 09:57:53

标签: javascript php jquery ajax post

目标:序列化数据,使用AJAX在HTTP POST请求中发送数据,在PHP中继续数据(并回答)

问题: PHP $ _POST变量似乎是空的

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

3 个答案:

答案 0 :(得分:3)

相同的原因可能是因为您没有在javascript中正确发布。在我添加代码之前,让我在这些情况下添加一些关于如何调试的技巧。

首先,您检查请求是否正确形成。在浏览器开发工具中检查网络。

第二种方法可以是在$ _POST上使用var_dump来列出所有的帖子参数并检查它们是否已经在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 string

答案 1 :(得分:0)

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

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

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

   /* Handlers hidden*/
});

答案 2 :(得分:-1)

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

contentType: 'application/json',

我建议在ajax请求期间提供内容类型:

data: JSON.stringify(postData)

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

self.audioPlayer.timeFormat(self.audioPlayer.getCurrentAudioTime()))


   func getCurrentAudioTime(){ 
   let dur = CMTimeGetSeconds(audioPlayer.currentTime())
    let cmValue = NSTimeInterval(dur)
    let newTime = CMTimeMakeWithSeconds(value, 1)
    self.audioPlayer.seekToTime(newTime)