循环内部的JQuery load()

循环内部的JQuery load(),jquery,loops,for-loop,load,wait,Jquery,Loops,For Loop,Load,Wait,我正在尝试编写一个Greasemonkey脚本,其中使用for循环加载不同页面的.load(),并将它们的一些信息存储在本地存储中。 我的问题是:因为.load()是异步的,所以它不能正常工作。我的脚本只存储我试图存储的最后一个值。我认为这是因为我在回调函数中使用了var I,当调用回调函数时,I已经有了另一个值 for (var i = 0; i < plantsDiv.length; i++) { objectid = plantsDiv[i].getAttribute('obj

我正在尝试编写一个Greasemonkey脚本,其中使用for循环加载不同页面的
.load()
,并将它们的一些信息存储在
本地存储中。
我的问题是:因为
.load()
是异步的,所以它不能正常工作。我的脚本只存储我试图存储的最后一个值。我认为这是因为我在回调函数中使用了
var I
,当调用回调函数时,
I
已经有了另一个值

for (var i = 0; i < plantsDiv.length; i++)
{
   objectid = plantsDiv[i].getAttribute('objectid');    
   $("#wrap").load("index.php?objectid="+ objectid,function(){
      //[...] what is happening
      window.localStorage.setItem(objectid,value);
   });
}
for(变量i=0;i
当我在回调函数和for循环结束之间插入
alert(“foo”)
时,一切正常,因为当我在alert窗口中单击“ok”时,
.load
函数已加载。 有没有办法让for循环等待整个
.load
执行完毕

感谢您的帮助,并为我的英语不好感到抱歉:)

函数的
load()
功能是一个
get()
函数-

此方法是从服务器获取数据的最简单方法。它是 大致相当于$.get(url、数据、成功),只是它是一个 方法而不是全局函数,并且它具有隐式回调 功能

通过使用稍微详细一点的
ajax()
函数,可以将请求指定为与
async
设置为false同步。也许这会解决你的问题

一个简单的同步ajax调用:

$.ajax({
  url: "example.php",
  data : yourData,
  async : false
},function(response){
  // this is the callback
});
参考-


如果目标不是将内容加载到元素中,而是获取内容并将其保存到本地存储中,则应使用$.get(如果要发布数据,则应使用$.post)

jQuery ajax函数返回一个jqXHR对象,该对象派生自延迟对象,因此可以使用.done()表示成功,使用.fail()表示失败:

$.get("index.php?objectid="+ objectid)
.done(function(data) {
    window.localStorage.setItem(objectid,data);
})
.fail(function() {
    // try again later?
});

编辑:请注意,请求仍将异步启动,在这种情况下,您可能有许多并行请求,当收到每个请求的响应时,将运行完成(或失败)块中的代码。

objectid=plantsDiv[i].getAttribute('objectid')之前放置一个
var
谢谢你的帮助,但这并不能解决我的问题,我之前已经初始化了这个变量。这就是问题所在-问题不在
i
上。不要在循环外声明它-在循环内声明它;)我试着在里面说。可悲的是,它无论如何都不起作用:(value
从何而来?我将它插入到页面中,然后存储部分内容:/但是您将多个请求的内容插入到同一个元素中(id#wrap),您无法保证首先收到的响应是什么,加载将覆盖现有内容。我知道,我正在将它们插入同一元素。我使用
load
插入内容,然后将我需要的内容存储到localStorage。之后,应执行下一个.load…您描述行为的方式让我思考你相信。加载是同步的。没有定义加载内容的顺序,有些内容永远看不见。但我想如果它对你有效,没关系。我知道,它是不同步的。我不需要任何特定的顺序。我甚至不需要用户看到它们,但我必须将它们包含到页面中一些ms b因为我无法访问它们(例如,使用
document.getElementById(“”
)而不包含它,因为我尝试加载的文件不是有效的xml文件。。。