我正在创建一个RPG。当用户登录时,我想从三个表中加载他们的数据:
quest_items 存储与商品相关的所有数据:
join_questitems 存储玩家ID与玩家所拥有物品之间的关联:
userstats 存储user_id,当前地图,当前任务,x y位置等
由于我想在运行时加载所有这些数据,我想我只是将两个查询放在同一个函数中,将结果存储在单独的数组中,然后将这两个数组推送到allData
数组中。然后编码allData
并将其传递给JS。
这里的问题是访问$.(each
循环中的数据:
PHP:
$allData = array();
$itemsArray = array();
$statsArray = array();
$qry =
'SELECT qi.*
FROM quest_items qi
LEFT JOIN join_questitems jqi ON (qi.item_id = jqi.item_id)
WHERE jqi.user_id = "' . $playerID . '"';
$result = $mysqli->query($qry) or die(mysqli_error($mysqli));
while ($row = $result->fetch_assoc()) {
$itemsArray[] = $row;
}
$qry =
'SELECT us.*
FROM userstats us
WHERE us.id_user_fk = "' . $playerID . '"';
$result = $mysqli->query($qry) or die(mysqli_error($mysqli));
while ($row = $result->fetch_assoc()) {
$statsArray[] = $row;
}
array_push($allData, $itemsArray, $statsArray);
echo json_encode($allData);
JavaScript代码段
我可以通过 quest_items 表中的$itemsArray
访问$allData
中的第一个数组(v[0].item_name
),其中包含:{{1正如预期的那样。
但是,如果我尝试从 userstats 表访问第二个数组rice, test/path.png
,则会提供v[1].username
。
undefined
$.getJSON("phpscripts.php", {
"_player" : Player,
"_playerID" : UserID
},
function(returned_data) {
$.each(returned_data, function (key, value) {
$(".questItems").append("<br/>" + value[1].username + ", " + value[0].item_name);
});
= undefined value[1].username
=工作这很奇怪,因为chrome调试器响应显示正在容器数组中添加和返回两个数组:
这是为什么?为什么我无法使用value[0].item_name
访问数组2?
编辑:
value[1].username
给予:
$.each(returned_data, function (key, value) {
console.log(value[1]);
});
这是Object {item_id: "2", item_name: "meat", item_chinese: "rou", ... (index):29
undefined (index):29
的结果集。也许发生了什么
由于value[0]
的结果行数多于value[0]
,因此即使它传递了数组大小,它也可能会再次为value[1]
循环。会打破它吗?
value[1]
实际上是从第一个项目数组中访问第二个数组值...而不是指向 userstats 数组?
编辑2:
在value[1]
给出之后 console.log(returned_data)
:
function(returned_data)
在[Array[2], Array[1]]
0: Array[2]
1: Array[1]
length: 2
__proto__: Array[0]
给出后 console.log(value);
:
$.each(returned_data, function (key, value) {
在[Object, Object]
0: Object
1: Object
length: 2
__proto__: Array[0]
[Object]
0: Object
length: 1
__proto__: Array[0]
之后 console.log(returned_data);
的扩展结果:
编辑3:如果我手动访问数组,它可以工作:function(returned_data)
returned_data[1][0]["username"]
但是如果我为item_name返回了很多数据行呢?我需要一个循环来获取所有数据。
答案 0 :(得分:1)
第一次传递给$.each()
的函数时,value
是0
子容器,其0
和1
。第二次运行该函数时,value
已经是1
子容器。
如果returned_data[0]
和returned_data[1]
不同,并且您希望对它们执行不同的操作,请不要使用$.each()
,只需使用returned_data[0]
和{{1 }}
所以:
returned_data[1]