POST, AJAX, and PHP : JSON submission


POST, AJAX, and PHP : JSON submission

好的,这是我的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);
  }
});

这是我得到的输出消息:

数组([rated] =>数组)
/ajax/rate.php on line X


编辑:实际上有更多的变量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);
  }
});

那么您应该能够在PHP脚本中使用$_POST访问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);
  }
});