POST,AJAX和PHP:JSON提交

时间:2011-10-23 05:25:32

标签: php javascript jquery ajax 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);
  }
});

这是我得到的输出消息:

  

阵   (       [评分] =>排列   )   
  致命错误:只能通过 ... / ajax / rate.php X p>


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

2 个答案:

答案 0 :(得分:2)

当通过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对象)

答案 1 :(得分:0)

这是一个合适的数组,而不是你所期望的那样。只需将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);
  }
});