我的JavaScript中的数组有问题。我似乎无法正确获得价值。
我用PHP创建我的数组:
$data = Array();
$get = mysql_query("SELECT x,y,sid FROM table WHERE uid='1'");
while($row = mysql_fetch_assoc($get)){
$data[$row['x']] = Array();
$data[$row['x']][$row['y']] = $row['sid'];
}
$data = json_encode($row)
编辑json_encode出现为“false”/ EDIT
然后我将这个$ data作为sdata分配给JS变量。
那么我试着在JS中获得它的价值,但它不起作用。我得到一个未定义的错误。
这是我的Javascript:
var i = 1;
var j = 5;
if(sdata["x"] == i && sdata["y"] == j){
alert(sdata["x"]["y"]["sid"]);
}
它意味着提醒我“sid”的价值,但我得到: 未定义
我的错误是什么想法?
答案 0 :(得分:2)
鉴于你的json
alert(sdata["x"]["y"]["sid"]);
应该是
alert(sdata["sid"]);
因为您显示的json编码数据只是一维数组
修改强>
如果你的json是假的,那就是另一个故事:
$data = json_encode($row);
应该在你的循环中,为了良好的练习,如果你只是编码$ row为什么甚至打扰
$data[$row['x']] = Array();
$data[$row['x']][$row['y']] = $row['sid'];
否则尝试
print_r($row);
在你的while语句中并确保你的预期结果首先来自mysql。
修改强>
如果你想在json中获取$ data变量,那么使用
$data = json_encode($data);
在你的循环之外。
修改强>
JSFiddle为给定的x和y返回sid - 我确信它可以以更干净的方式完成,但它是一个开始 http://jsfiddle.net/HWByj/
var sdata = {"4":{"4":"1"},"7":{"1":"0"}};
var i = 4;
var j = 4;
if(typeof sdata[i] != 'undefined')
{
if(typeof sdata[i][j] != 'undefined')
{
alert(sdata[i][j]); //gives you the value of sid
}
}
答案 1 :(得分:2)
在您的示例中,您只需要:
alert(sdata["sid"]);
答案 2 :(得分:1)
我认为你的问题就在这里:
$data = json_encode($row)
我想你想要这个:
$data = json_encode($data);
您循环遍历行并将数据放入$ data中,但随后您将对$ row变量进行编码。您还使用该$ row变量退出while循环,因此在编码时$ row可能为null。这就是它出现错误的原因。
答案 3 :(得分:1)
如果您的json_encode()
正在返回false
,请确保从查询中获取数据。此外,您没有使用$data
执行任何操作,而是json_encode()
$row
,这将为您提供与我相信您所期望的结构不同的结构。
答案 4 :(得分:0)
你必须使用sdata.x,sdata.y和sdata.sid,因为返回的json不是一个关联数组,但它是一个对象。
尝试使用这段js代码:
function myobjtool(myobj, i, j) {
// alert("myobj: " + myobj.x);
if(myobj.x == i && myobj.y == j) {
alert(myobj.sid);
}
}
myobj = {"x":"4","y":"4","sid":"1"}
myobjtool(myobj, 4, 4)