奇怪的JSON行为,javascript变量的范围

时间:2011-02-17 12:56:57

标签: php json

我在php变量中有一个名为$ result的数组。

当我echo json_encode($result);时,我得到:

[{"id":"4","rank":"adm","title":"title 1"},
{"id":"2","rank":"mod",,"title":"title 2"},
{"id":"5","rank":"das","title":"title 3"},
{"id":"1","rank":"usr""title":"title 4"},
{"id":"3","rank":"ref","title":"title 5"}]

然而,当尝试使用警报获得相同时,我会得到不同的结果。这是一个例子。

<script type="text/javascript">
//<![CDATA[
$(document).ready(function() { myArray = <?=json_encode($result);?>; });
$('img.delete').click(function() { alert(myArray); }
//]]>
</script>

我收到的提醒是[object Object],[object Object], ...

我不确定,但似乎变量myArray没有正确传递到$('img.delete').click(function()

3 个答案:

答案 0 :(得分:1)

在我看来,你有一个对象数组,在JS中我会说你需要遍历对象并读取其中的变量,因为警报没有显示对象的内容就是你'我要求在数组中显示什么 - 也就是说:和对象数组。

我会将数组保存到变量并通过数组进行迭代,然后输出每个数组中包含的数组。

嗯....有点像这样:

for(i = 0; i < myArray.length; i++) {
 // access each sub object and collate the info you want to display
 // ie: myArray[i]['id']
}

我可能过度简化了,但我记得在构建的ajax应用程序中遇到了同样的问题,我确信这就是我的方式。

答案 1 :(得分:1)

调用alert(myArray)不会为您提供数据的json表示。函数alert()在其参数上调用toString()。而javascript对象的默认toString()实现只返回字符串"[object Object]"

如果要显示JSON表示,则可以使用json序列化库生成json字符串。 This page解释了一个例子。

答案 2 :(得分:0)

你会期待什么?

在php中尝试echo array("1" => 1, "2" => 2);,看看你得到了什么。

myArray是一个javascript对象,而不是一个可以轻松输出的字符串。如果要输出特定值,请写入alert(myArray[0]['id']);

另一件事 - 变量范围。如果要在各种闭包中使用myArray,则应将其声明为全局。