好的,这是我的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
,但它们都不是数组(因此它们没有问题),所以为了简洁起见,我将它们从上面的代码中删除了。
答案 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);
}
});