亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery AJAX調用for循環

jQuery AJAX調用for循環

浮云間 2019-12-02 13:51:51
我是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被傳遞到包裝自執行匿名函數; 這個唯一值的位置被異步回調捕獲。這樣,每個異步都會獲得自己的值,該值是在調用自執行函數時確定的。


查看完整回答
反對 回復 2019-12-02
  • 2 回答
  • 0 關注
  • 986 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號