为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 944 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信