jQuery AJAX调用for循环

我是使用AJAX的新手,并且正在编写一个脚本,它将处理页面上的一堆链接,并为每个链接创buildAJAX调用。

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来处理每个链接页面的内容,并在该页面包含指定的内容时返回。

我遇到的问题是[i]用于迭代linkList的值始终是6,并且它永远不会。 我假设我需要传递一些数据,以便当.done最终触发时,它知道AJAX第一次触发时的[i]值,而稍后.done会触发[i]的值。

我该如何去确保。当AJAX第一次被调用的时候,我知道它是值得的。

2 Solutions collect form web for “jQuery AJAX调用for循环”

最简单的方法是使用闭包。 只要你在循环中有asynchronous的东西,它是一样的。

 for (var i .....) { async(function() { use(i); } } 

在这个伪代码片段中,内部函数捕获由i引用的存储位置 。 循环运行, i增加到它的最终值,然后asynchronouscallback开始得到调用,所有他们查找完全相同的位置 (不值)。

一般的解决scheme是这样的:

 for (var i .....) { (function (i) { async(function() { use(i); }); })(i); } 

即把你的循环的全部内容包装在一个自动执行的函数中。

在这里,外部i被传递到包装自我执行的匿名函数; 这个唯一值的位置被asynchronouscallback捕获。 通过这种方式,每个asynchronous获得自己的值,在执行自执行函数的时刻被确定。

问题注释部分的链接告诉你代码中出了什么问题,但是你可以有一个比以前解释的更好的解决scheme。

尝试$ .each()遍历列表(假设它是一个数组),所以通过的callback将为每个迭代创build一个单独的闭包

 $.each(linkList, function (i, item) { $.ajax({ url: item.getAttribute("href"), cache: false }).done(function (html) { var hasAppended = false; if (html.indexOf('someStringOnGottenPage') != -1 && !hasAppended) { hasAppended = true; var id = item.getAttribute("href").substring(item.getAttribute("href").indexOf('=')); $("#links a[href*='" + id + "']").append(' THIS PAGE CONTAINS SPECIFIED DATA'); } }); }) 

如果它是一个jQuery对象,那么使用.each()

 linkList.each(function (i, item) { var $item = $(item), href = $item.attr("href"); $.ajax({ url: href, cache: false }).done(function (html) { var hasAppended = false; if (html.indexOf('someStringOnGottenPage') != -1 && !hasAppended) { hasAppended = true; var id = href.substring(href.indexOf('=')); $("#links a[href*='" + id + "']").append(' THIS PAGE CONTAINS SPECIFIED DATA'); } }); }) 
  • 仅当string不为空或空时,才使用分隔符joinstring?
  • 如何在.js文件中从jQuery函数访问PHP会话variables?
  • 如何检查一个值是否是JavaScript或jQuery中的数字
  • 如何有点击事件只在父DIV,而不是孩子?
  • 设置内容的高度100%jQuery的手机
  • 如何使用JQuery创build新的img标签,使用JavaScript对象的src和id?
  • 如何阻止ASP.NET更改ID以使用jQuery
  • 如何从AJAX调用返回数组?
  • JQuery如何从href标签中提取值?
  • dynamic加载CSS样式表在IE上不起作用
  • JSONP请求error handling