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