我最近开始使用ajax搞砸了Json。
我有这个javascript代码:
var json = {
"test": [{
"number":1,
"char":"hey",
"bool":true
}]
};
$.ajax({
url: "json.php",
type: "POST",
contentType: "application/json",
data: {json: JSON.stringify(json)},
success: function(res) {
$("#box").html(res);
}
});
几分钟前,这段代码完全正常,当我echo $json['test']['number'];
返回时1
。
但现在这根本不起作用,它说'json'索引是UNDEFINED,因此我尝试使用contentType: "application/x-www-form-urlencoded",
,它确实有效,但我根本无法得到数组项。
如果我不在json_decode()
函数中传递true参数,我将收到以下错误:
Cannot use object of type stdClass as array
如果我这样做,我将无法获取数据,但响应将显示“数组”。
这就是我回应:
$json = $_POST['json'];
$json = json_decode($json, true);
echo $json['test'][0];
那是$json
的var_dump:
array(1) {
["test"]=>
array(1) {
[0]=>
array(3) {
["number"]=>
int(1)
["char"]=>
string(3) "hey"
["bool"]=>
bool(true)
}
}
}
为什么这样做?为什么我不能在没有返回数组的情况下从中获取值?
答案 0 :(得分:4)
鉴于此:
var json = {
"test": [{
"number":1,
"char":"hey",
"bool":true
}]
};
您的PHP代码
$json['test']['number'];
如果test
不是数组,首先会 。以上用JavaScript表示:
json.test.number;
但test
是Array
;它没有number
属性。在JavaScript中,这是查找number
的正确方法:
json.test[0].number;
你需要在PHP中做同样的事情:
$json['test'][0]['number'];