jQuery AJAX调用for循环

我是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]值?


浮云间
浏览 945回答 2
2回答

温温酱

最简单的方法是使用闭包。每当循环中有异步的东西时,它都是一样的。for (var i .....) {&nbsp; asynchronousFunction(function() {&nbsp; &nbsp; use(i);&nbsp; }}在此伪代码段中,内部函数捕获引用的存储位置i。循环运行,i递增到其最终值,然后开始调用异步回调,所有这些回调都查找完全相同的位置(而不是值)。通用解决方案是这样的:for (var i .....) {&nbsp; (function (i) {&nbsp; &nbsp; asynchronousFunction(function() {&nbsp; &nbsp; &nbsp; use(i);&nbsp; &nbsp; });&nbsp; })(i);}即将循环的全部内容包装在一个自执行函数中。这里,值外的i被传递到包装自执行匿名函数; 这个唯一值的位置被异步回调捕获。这样,每个异步都会获得自己的值,该值是在调用自执行函数时确定的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JQuery