2013-05-06 59 views
1

我需要從一個jQuery JSON呼叫訪問外,局部變量而不發送該變量到服務器(因此不使用數據參數):如何將變量綁定到jQuery getJSON調用?

for (var prop in channels) { 
    $.getJSON(url).done(function(json) { 
     channels[prop].value = ...; 
    }); 
} 

不幸的是,prop vairable改變作爲外循環繼續。

是否可以將變量綁定到getJSON調用?

回答

3

好吧,發現基於jQuery's proxy function答案:

for (var prop in channels) { 
    $.getJSON(url).done(
     $.proxy(function(json) { 
      channels[this._prop].value = ...; 
     }, {_prop: prop} 
    ); 
} 

從本質上講,$.proxy()創建一個包裝函數,它的附加context參數,並確保它是作爲this到包裝的函數傳遞。

+0

另外,它也應該能夠包住$ .getJSON調用在它自己的功能,這將也保持該功能的參數。 – andig 2013-06-30 10:32:30

+0

終於找到了答案,謝謝! IE8給我「對象不支持財產或方法」,花了我整整一天,直到這個解決方案!謝謝! – ronnyrr 2014-01-09 15:19:21

+0

我認爲包裝ajax函數來創建閉包只會使用外部函數的最後一個值而不是被調用時的值,但是感謝代理指針! – ejectamenta 2015-08-13 13:02:21

0

用法與JS:綁定:

for (var prop in channels) { 
    $.getJSON(url).done(function(json) { 
     channels[this].value = ...; 
    }.bind(prop)); 
} 

用法與$阿賈克斯方面:

for (var prop in channels) { 
    $.ajax({ 
     url: url, 
     dataType: 'json', 
     context: param, 
     success: function(data) { 
      channels[this].value = ...;} 
     }) 
}