传递JSON使用Ajax发布通过JavaScript到PHP不工作

问题描述:

嗨,我想通过Ajax发送JSON到PHP使用Javascript。当我在firebug上查看数据时,index.html会正确发送数据。它显示Json类型与正确的数据。 但是,似乎我无法阅读php上的JSON。我无法使用$ _POST访问它。 我试过使用$ _POST ['名称']并没有响应。 当我尝试使用$ _POST时,响应是数组。 你能帮我吗?传递JSON使用Ajax发布通过JavaScript到PHP不工作

这是我的javascript代码。

<html> 
<head> 
<script type="text/javascript"> 
    //Create Http request depending on browser 
    var xmlhttp; 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest();} 
     else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} 

    xmlhttp.onreadystatechange=function(){ 
     if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
     document.getElementById("myDiv").innerHTML=xmlhttp.responseText;} 
     } 

    // Function to create 
    var url = "control.php"; 
    xmlhttp.open("POST",url,true); 
    xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
    var data=JSON.stringify({"name":"John", "time":"2pm"}); 
    xmlhttp.send(data); 
} 
</script> 
</head> 
<body> 
<h2>AJAX</h2> 
<button type="button" onclick="loadXMLDoc()">Request data</button> 
<div id="myDiv"></div> 
</body> 
</html> 

这是我的PHP代码

<?php 
include_once('JSON.php'); 
$json = new Services_JSON(); 
$value = $json->decode($_POST['name']); 
echo $value; 
?> 

一直在这几天,我真的很感激任何帮助,您可以提供。 谢谢!

+0

为什么不使用javascript库? –

+0

使用jQuery.ajax();如果您使用Firefox的Firebug插件(Tab Console或Network)请求调查时遇到问题 – peipst9lker

+0

执行print_r($ _ POST),您将看到$ _POST全局变量是什么。也许它会帮助你解决问题 –

这里是:

print_r($GLOBALS['HTTP_RAW_POST_DATA']); 
+0

嘿!非常感谢!这解决了我的问题。你能指点我一个文件,在这里我可以读到为什么$ GLOBALS ['HTTP_RAW_POST_DATA']在这种情况下工作?但尽管如此,非常感谢你们!你只是让我的日子=) – shaoming

+0

你可以在这里找到[PHP手册](http://cn.php.net/manual/en/reserved.variables.httprawpostdata.php)。但我会做一些测试,如(print_r ($ GLOBAL),print_r($ _ SERVER))当我有这样的问题。这是有帮助的。 :) –

我认为它需要首先分析整个职位。

<?php 
include_once('JSON.php'); 
$json = new Services_JSON(); 
$value = $json->decode($_POST); 
echo $value; 
?> 

但是您是否也需要这些包括? http://www.php.net/manual/en/function.json-decode.php

include_once('JSON.php'); 
$json = new Services_JSON(); 

可以不只是你这样做吗?

echo json_decode($_POST) 
+0

嗨,感谢所有的评论和答案!我试着使用echo json_decode($ _ POST),正如你所建议的那样,但是给出的响应是空白的。当我尝试执行print_r($ _ POST)时,给定的输出是arrray()。 – shaoming

一个更好的解决方案(见here)是使用:

$json = json_decode(file_get_contents("php://input"), true) ?: []; 
print_r($json);