for循环中的JQuery load()

时间:2013-02-19 19:19:30

标签: jquery loops for-loop load wait

我正在尝试编写一个Greasemonkey脚本,其中使用for循环在.load()加载不同的页面,并在localStorage中存储一些信息。 我的问题:因为.load()是异步的,所以效果不好。我的脚本只存储我要存储的Last值。我认为这是因为我在回调函数中使用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循环结束之间插入alert("foo")时,一切正常,因为.load函数已加载,而我在警告窗口中单击“确定”。 有没有办法让for循环等到整个.load被执行?

感谢您的帮助,对不起我的坏英语:)

2 个答案:

答案 0 :(得分:1)

load()函数pretty much the sameget()函数 -

  

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

通过使用稍微更详细的ajax()函数,您将能够将{{1>}设置为false的请求指定为 synchronous 。也许这将解决您的问题。

一个简单的同步ajax调用:

async

参考文献 -

答案 1 :(得分:0)

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

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

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

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