我是AJAX的新手,并且正在編寫一個用戶腳本,該腳本將處理頁面上的一堆鏈接并為每個鏈接進行AJAX調(diào)用。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來處理每個鏈接頁面的內(nèi)容,并報告該頁面是否包含指定內(nèi)容。我遇到的問題是用于遍歷linkList的[i]的值始終為6,應該永遠不會。我假設我需要傳遞一些數(shù)據(jù),以便當.done最終觸發(fā)時,它從AJAX首次觸發(fā)時知道其[i]值,而在.done之后觸發(fā)時則不知道[i]的值。在首次調(diào)用AJAX時,如何確保.done知道[i]值?
2 回答

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