在JS中处理数组值

时间:2012-03-13 23:56:50

标签: php javascript

我的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”的价值,但我得到: 未定义

我的错误是什么想法?

5 个答案:

答案 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)