2011-02-17 52 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肯定這是方式我去了。