2010-04-07 78 views
0

jQuery.getJSON()方法似乎忽略JavaScript中範圍的正常規則。變量作用域和jQuery.getJSON()方法

考慮如下代碼...

someObject = { 
    someMethod: function(){ 
     var foo; 

     $.getJSON('http://www.somewhere.com/some_resource', function(data){ 
      foo = data.bar; 
     }); 

     alert(foo); // undefined 
    } 
} 

someObject.someMethod(); 

是否有訪問的getJSON範圍之外的變量值的最佳做法?

+0

什麼是不是從我的初始後明確的是,價值getJSON方法中的foo集合將在後面的函數中使用,這就是爲什麼變量在getJSON方法之外初始化的原因,儘管顯然需要清理一些JavaScript的細微差別。 – jerome 2010-04-07 19:41:06

回答

2

你的代碼的問題在於,在JSON請求返回後(在回調函數中),foo被設置。將警報轉入回調將解決問題。

從範圍上看,代碼很好。由於JavaScript有閉包,回調函數將有權訪問周圍的上下文(包括foo變量)。所以當你設置foo時,你正在設置相同的變量。

0

這不是關於getJSON()的一些奇怪的特長。這是完全正常的JS行爲 - 畢竟你正在使用回調函數。運行完全分離,並分別從上下文他們一直在定義回調

最好是你的權利在回調處理一切:

someObject = { 
    someMethod: function(){ 
    $.getJSON('http://www.somewhere.com/some_resource', function(data) { 
     var foo = data.bar; 
     alert(foo); 
    }); 
    } 
}