我是AJAX的新手,并且正在編寫一個用戶腳本,該腳本將處理頁面上的一堆鏈接并為每個鏈接進行AJAX調用。for (var i = 0; i < linkList.length; i++){ $.ajax({ url: linkList[i].getAttribute("href"), cache: false }).done(function( html ) { var hasAppended = false; if (html.indexOf('someStringOnGottenPage') != -1 && !hasAppended) { hasAppended = true; var id = linkList[i].getAttribute("href").substring(linkList[i].getAttribute("href").indexOf('=')); $( "#links a[href*='" + id + "']" ).append(' THIS PAGE CONTAINS SPECIFIED DATA'); } });}簡單地說,我有一個包含鏈接列表的頁面。我希望遍歷鏈接并獲取AJAX來處理每個鏈接頁面的內容,并報告該頁面是否包含指定內容。我遇到的問題是用于遍歷linkList的[i]的值始終為6,應該永遠不會。我假設我需要傳遞一些數據,以便當.done最終觸發時,它從AJAX首次觸發時知道其[i]值,而在.done之后觸發時則不知道[i]的值。在首次調用AJAX時,如何確保.done知道[i]值?
2 回答

溫溫醬
TA貢獻1752條經驗 獲得超4個贊
最簡單的方法是使用閉包。每當循環中有異步的東西時,它都是一樣的。
for (var i .....) {
asynchronousFunction(function() {
use(i);
}
}
在此偽代碼段中,內部函數捕獲引用的存儲位置i。循環運行,i遞增到其最終值,然后開始調用異步回調,所有這些回調都查找完全相同的位置(而不是值)。
通用解決方案是這樣的:
for (var i .....) {
(function (i) {
asynchronousFunction(function() {
use(i);
});
})(i);
}
即將循環的全部內容包裝在一個自執行函數中。
這里,值外的i被傳遞到包裝自執行匿名函數; 這個唯一值的位置被異步回調捕獲。這樣,每個異步都會獲得自己的值,該值是在調用自執行函數時確定的。
- 2 回答
- 0 關注
- 986 瀏覽
添加回答
舉報
0/150
提交
取消