带JSON的JQuery / AJAX - $ GLOBALS ['HTTP_RAW_POST_DATA']为空?

时间:2012-11-13 18:00:56

标签: jquery ajax json

我正在努力应对非常简单的事情。我花了好几个小时在网上寻找解决方案,并检查了jQuery文档。

我试图通过json字符串向我的服务器发送一个简单的请求。 我试过逃避json,encodeURIcomponent等等。我确定它很简单,我很快就会狠狠地拍打自己,但是这就是:

这是Javascript:

$(document).ready(function() {
$("#mybutton").click(function(e) {
submitMyRequest();  
});
});


function submitMyRequest()
{

var json = [{"id":"1", "area":"south"}, {"id":"2", "area":"north"},{"id":"3", "name":"east"},{"id":"1", "name":"west"}];

 jQuery.ajax({
     url: "test_server.php",
     type: "POST",
     data: {areas: json },
     dataType: "json",
     beforeSend: function(x) {
         if (x && x.overrideMimeType) {
             x.overrideMimeType("application/j-son;charset=UTF-8");
         }
     },
     success: function(result) {
     alert(result);
     }
 });
}

这是服务器代码:

print_r(json_decode($GLOBALS['HTTP_RAW_POST_DATA'],true));

我不断得到的结果是一个警告说:

null

2 个答案:

答案 0 :(得分:1)

根据this$HTTP_RAW_POST_DATA仅填充了无法识别的数据MIME类型。要解决此问题,您可以将always_populate_raw_post_data ini值设置为true,或使用首选方法访问原始POST数据,从php://input读取

$postdata = file_get_contents("php://input");

此外,它看起来不像你正在向服务器发送json,试试这个

data: JSON.strinify({areas: json }),

答案 1 :(得分:0)

试试这样:

var json = '[{"id":"1", "area":"south"}, {"id":"2", "area":"north"},{"id":"3", "name":"east"},{"id":"1", "name":"west"}]';

在您的服务器端:

print_r(json_decode($_POST['areas'],true));