POST,AJAX和PHP:JSON提交

好的,所以这是我的JS / jQuery代码,我的rate.php文件中只有一个print_r($_POST) 。 问题是, $_POST接受被rated字符串"Array" ,而不是我定义的实际数组。 如何更正此代码,以便PHP将JSON输入识别为正确的数组,而不是字符串?

 var rated = {"key" : key , "value" : value}; $.ajax({ type: "POST", url: $(location).attr('protocol') + "//" + $(location).attr('hostname') + "/ajax/rate.php", data: { "rated" : rated }, success: function(data) { alert(data); } }); 

这是我得到的输出消息:

数组([rating] =>数组)
致命错误 :只有变量可以通过引用传递到第X行的… / ajax / rate.php中


编辑:实际上有更多的变量被rated ,但它们都不是数组(因此它们没有问题),所以为了简洁起见,我将它们从上面的代码中删除了。

当通过ajax将JSON数据传递给php脚本时,我建议对JSON数据进行字符串编码,然后在服务器端解析它。

 var rated = {"key" : key , "value" : value}; var rated_encoded = JSON.stringify(rated); $.ajax({ type: "POST", url: $(location).attr('protocol') + "//" + $(location).attr('hostname') + "/ajax/rate.php", data: { "rated" : rated_encoded }, success: function(data) { alert(data); } }); 

然后,您应该能够使用$ _POST访问PHP脚本中的POST变量,与任何其他标量值一样。 在服务器端获得JSON字符串’rating_encoded’后,使用PHP的json_decode()将其解析为关联数组。

 if(isset($_POST["rated"])){ $rated_json = $_POST["rated"]; $JSONArray = json_decode($rated_json, true); //returns null if not decoded //Values can now be accessed like standard PHP array if($JSONArray !== null){ $key = $JSONArray["key"]; $value = $JSONArray["value"]; } } 

我发现这种方法对于将javascript对象数据传输到服务器非常有效,反之亦然(使用PHP的json_encode()将PHP数组转换为有效的javascript对象)

这是一个合适的数组,而不是你所期望的那样。 您可能只需按原样将rated传递给data参数即可实现。 即

 var rated = {"key" : key , "value" : value}; $.ajax({ type: "POST", url: $(location).attr('protocol') + "//" + $(location).attr('hostname') + "/ajax/rate.php", data: rated, success: function(data) { alert(data); } });