来自PHP服务器的JSON数据响应为空

来自PHP服务器的JSON数据响应为空,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我很难弄明白这一点。似乎无论我尝试什么,PHP总是返回一个空数组。以下是我的主文件(index.php)的代码: 没有定义.ajax函数中的数据类型,因此无论server.php文件输出什么,它都应该是可读的。所有必要的库(json、jquery)也包含在我的文档中。我在Apache2.2和PHP5.3.1上运行它,但在我的Web服务器(它是数千个网站的主机)上也显示了同样的情况。请求标头中使用的内容类型为“application/x-www-form-urlencoded;字符集=UTF-8'

我很难弄明白这一点。似乎无论我尝试什么,PHP总是返回一个空数组。以下是我的主文件(index.php)的代码:

没有定义.ajax函数中的数据类型,因此无论server.php文件输出什么,它都应该是可读的。所有必要的库(json、jquery)也包含在我的文档中。我在Apache2.2和PHP5.3.1上运行它,但在我的Web服务器(它是数千个网站的主机)上也显示了同样的情况。请求标头中使用的内容类型为“application/x-www-form-urlencoded;字符集=UTF-8',因此应该可以正常工作

谢谢你抽出时间。 顺致敬意,
soren使用firefox和Live Http头扩展。
有了它,您将能够准确地看到问题所在,
Php或Js代码。


我认为你发送数据的方式不对。要么发送一个字符串,如
testName=testValue
,要么将
test
中的值直接分配给
.ajax()
data
参数,而不使用
stringify
方法

因为,如果使用
stringify
,实际发送的数据将是(我假设,我不确定):

'{“testName”:“testValue”}'

但这不是有效的参数字符串

它应该是正式的

'testName=testValue'

因此,直接使用
test
将对象转换为适当的字符串:

function callServer() {
 $.ajax({
   type: "POST",
   url: "ajax/server.php",
   data: test,
   success: function(data) {
     updatePage(data);
   },
   //Upon error, output message containing a little info on what went wrong
   error: function (XMLHttpRequest, textStatus, errorThrown) {
     alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status);
   }
 });
}

我不确定PHP脚本的输出是否为JSON格式

如果您使用的是较新版本的PHP(即现在的PHP),则可以访问json_encode和json_decode函数。而不是做:

print_r($_POST);
尝试:

如果您的PHP版本没有这些函数,您可以使用Zend框架中的Zend_Json类库,以便在输出PHP变量之前将其编码为Json


当它返回时,它将是一个JSON格式的字符串。在jQuery.ajax调用中设置数据类型应将其计算为JS对象。如果不是这样,您就必须对其调用Javascript eval函数,或者(最好)使用JSON.parse(data)。

这样就可以得出以下结论:在meNope看来这似乎是正确的,它应该是这样的:从{“testName”:“testValue”}我认为testName=TestValueAgreement是错误的。。。你不需要严格化。只需将数据作为JSON发送即可。将该测试变量作为数据而不是testJSON。Firebug说我正确发送了JSON数据我的js中的test也像一个对象。我将您的代码更正为$\u POST而不是$\u POST。它只输出以下“[]”
Array
(
)
function callServer() {
 $.ajax({
   type: "POST",
   url: "ajax/server.php",
   data: test,
   success: function(data) {
     updatePage(data);
   },
   //Upon error, output message containing a little info on what went wrong
   error: function (XMLHttpRequest, textStatus, errorThrown) {
     alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status);
   }
 });
}
print_r($_POST);
print json_encode($_POST);