我对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>
答案 0 :(得分:4)
我相信您达到了最大数量的请求限制,因此您的浏览器正在等待更多线程可用。看看这个主题:How many concurrent AJAX (XmlHttpRequest) requests are allowed in popular browsers?