2013-03-18 105 views
2

所以我試圖從JSON分配數據到一個全局變量多次使用它,但我得到這個問題。第一個警報通過確定,但對於第二個我不能讀取未定義的propery 4。JQuery閱讀JSON(全局/本地變量)

var refference=[] 
    $.getJSON('letters.json', function(data) { 
       refference=data.letters 
       alert(refference[1][4]) 
     }) 
    alert(refference[1][4]) 

謝謝!

+2

你不能。 Ajax是異步的,外部的警報將在Ajax完成之前發生。 http://learn.jquery.com/ajax/key-concepts/ *「A是爲異步」* – 2013-03-18 21:59:57

回答

5

第二個alert(refference[1][4])會給你一個錯誤,因爲在那個時間點,$.getJSON()請求還沒有返回。所以refference對象仍然是[],因此屬性4是未定義的。

1

正如Kevin B所說,警報在ajax調用完成之前就會觸發。您必須將第二個警報(或任何其他函數)放入ajax請求的成功回調中,以確保它在數據完全加載後觸發。

類似:

$.getJSON('letters.json', function(data) { 
       refference=data.letters; 
       alert(refference[1][4]); 
     }).success(function(){ 
        alert(refference[1][4]); 
        }); 

Here's a working jsFiddle example using a JSON webservice

+0

請注意,你的.done()部分是無效的,仍然會提醒undefined或拋出錯誤 – 2013-03-18 22:04:37

+0

是的,我的壞。應該使用''成功'。將更新我的答案,幷包括一個工作jsFiddle – Jack 2013-03-18 22:31:20

+0

不,成功貶值。 .done()是正確的,但.done(alert(...))是錯誤的,.success也是如此({...}) – 2013-03-18 22:55:16