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

sor*_*ist 5 php ajax jquery json

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

<script language="javascript" type="text/javascript">

$(document).ready(function(){

  $(".ajaxlink").click(function() {
    callServer();
    return false; //Stop link from redirecting
  });

});

var test = { "testName": "testValue" }
var testJSON = JSON.stringify(test);

function updatePage(data) {
  document.getElementById("testDiv").innerHTML = data;
}

function callServer() {
 $.ajax({
   type: "POST",
   url: "ajax/server.php",
   data: testJSON,
   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);
   }
 });
}

</script>

<div id="testDiv">Something here</div>

<a href="test1.htm" class="ajaxlink">Link!</a> <br>
Run Code Online (Sandbox Code Playgroud)

当您单击“链接!”时,这基本上会运行 callServer() 函数。然后它将测试 json 数据,即 { "testName": "testValue" } 发送到 server.php。Firebug 报告 json-data 确实发送到 server.php。

我的 server.php 看起来像这样:

<?php

print_r($_POST);

?>
Run Code Online (Sandbox Code Playgroud)

这将在 testDiv 中返回以下内容:

Array
(
)
Run Code Online (Sandbox Code Playgroud)

.ajax 函数中的数据类型没有定义,所以无论 server.php 文件输出什么,它都应该是可读的。所有必要的库(json、jquery)也包含在我的文档中。我在 Apache 2.2 和 PHP 5.3.1 上运行它,但它在我的网络服务器(它是数千个网站的主机)上显示相同。请求头中使用的内容类型是'application/x-www-form-urlencoded; charset=UTF-8' 这样应该可以正常工作。

谢谢你的时间。最好的问候索伦

Fel*_*ing 4

我认为您以错误的方式发送数据。要么发送一个类似的字符串,要么直接testName=testValue将值分配给的参数并且不使用该方法。testdata.ajax()stringify

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

'{ "testName": "testValue" }'

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

应该是有形式的

'testName=testValue'

所以test直接使用,.ajax()会将对象转换成合适的字符串:

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);
   }
 });
}
Run Code Online (Sandbox Code Playgroud)