我在php中创建一个json对象并将其发送回主页:
$invSlots = array();
$invSlots['slots'] = array();
for( $i = 1; $i < $player_max_slots+1; $i++){ //player max slots comes from db
$invSlots['slots'][$i] = $inventory_info3[$i];
}
$json = $invSlots;
$encoded = json_encode($json);
die ($encoded);
帖子的反应如下:
{"slots": {
"1": "1",
"2": "0",
"3": "0",
"4": "4",
"5": "0",
"6": "0",
"7": "3",
"8": "0",
"9": "0",
"10": "0",
"11": "2",
"12": "0"
}
}
我试图获得像这样的插槽数量:
var myResponse = JSON.decode('(' + responseText + ')'); //decode server json response
maxSlots = myResponse.slots.length; //set max slots
但myResponse.slots.length只返回undefined,我该如何解决?
答案 0 :(得分:1)
slots
不是数组,而是另一个对象。如果它被序列化为数组,它可能看起来更像:
{ "slots":
[
{ "0": "1" },
{ "1": "0" },
{ "2": "0" },
...
]
}
甚至只是:
{ "slots": [ "1", "0", "0" ] }
尝试将循环更改为:
for ($i = 0; $i < $player_max_slots; $i++) { //player max slots comes from db
$invSlots['slots'][$i] = $inventory_info3[$i];
}
正如Zimzat在上面的评论中所说,一旦你的数组的索引从0开始,当你将对象序列化为JSON时,你应该得到一个slot
的数组。
实际上,根据php.net论坛上的一些人的说法,你需要了解索引数组。
<?php
echo json_encode(array("test","test","test"));
echo json_encode(array(0=>"test",3=>"test",7=>"test"));
?>
会给:
["test","test","test"]
{"0":"test","3":"test","7":"test"}
只有在未定义索引或索引是连续的并且从0开始时才返回数组。
答案 1 :(得分:1)
您已声明了关联数组,而不是索引数组。所以你不能使用长度。
要从关联数组中获取计数,您需要遍历其键:
var count=0;
for (var key in $invSlots['slots'])
count++;
答案 2 :(得分:0)
你可以做一点功能:
function len(obj) {
var ret = 0;
for (var i in obj) ret++;
return ret;
}
var maxSlots = len(myResponse.slots)