2011-02-17 51 views
1

我在一个名为$ result的php变量中有一个数组。奇怪的JSON行为,一个javascript变量的作用域

当我做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()

+1

这对我来说并不陌生...... – 2011-02-17 13:04:31

+0

什么是id2上的双逗号和id1上没有逗号(是不是无效的json)......只是说,但我明白你在问什么。 – Christopher 2011-02-17 13:32:13

回答

1

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

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

0

你会期待什么?

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

myArray是一个javascript对象,不是一个可以轻松输出的字符串。如果你想输出一定的数值​​,那么写alert(myArray[0]['id']);

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

+0

谢谢Briedis。 oho呼应正在完美运行,因为它应该如此。 `alert(myArray [0] ['id']);`确实有道理。但是,有没有办法将myArray格式化为JSON? – 2011-02-17 13:15:58

+0

我的回答是沿着这些线路,但可能不是很好解释,尽管可以通过myArray []整理所有内容并整理所有内容...... – Christopher 2011-02-17 13:21:29

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应用程序相同的问题我建立和IM肯定这是方式我去了。