在所有XHR完成加载之前,jQuery.ajax()页面加载没有完成?

时间:2011-11-14 20:04:51

标签: jquery ajax wordpress asynchronous xmlhttprequest

我对Ajax很新,但我认为使用它是'异步'部分。不幸的是,我似乎陷入了同步地狱。

在我的页面的早期,创建了许多元素,每个元素都有一个唯一的ID。

在我的页面的最后,使用jQuery迭代每个元素并发出一个ajax()调用(我明确地将'async'设置为true!)。目前完成后,每个Ajax调用只是用一些文本输出填充相应的元素。最终它将是一个IMG。

发生的是我在页面上获得“忙”鼠标光标,并且在所有(17)XHR请求返回之前,某些元素不会填充。

这是我的jQuery调用:

jQuery('.ajax-item').each(function(index){
    $item = jQuery(this);
    ID = $item.attr('id');

    //$item.load(WPGlobals.ajaxurl, { 'action' : 'my-action', 'ID' : ID });
    jQuery.ajax({
        url : WPGlobals.ajaxurl,
        type : 'POST',
        async : true,
        data : { 'action' : 'my-action', 'ID' : ID },
        success : function(response){ $item.html(response) }
    });
});

看一下这段代码(上图),你会注意到这是一个WordPress网站(虽然我不知道与什么有什么关系),而且我也尝试过更简单的load()方法,并切换到ajax()所以我可以强制async : true以防万一由于某些WP怪异而导致Globals出现任何有趣的混乱。

我是以正确的方式来做这件事的吗?不管AJAX如何,我的页面都不应该加载,那么当XHR进来时,这些项目会懒得填充吗?

编辑 - 我刚注意到我的逻辑在静态调用中混乱了;我可能需要一个闭包才能正确地获取$ item,但是在异步问题上它既不在这里也不存在 - 它仍会触发17个XHR并在页面加载完成之前等待它们全部回家。 / p>

1 个答案:

答案 0 :(得分:4)

我相信您达到了最大数量的请求限制,因此您的浏览器正在等待更多线程可用。看看这个主题:How many concurrent AJAX (XmlHttpRequest) requests are allowed in popular browsers?