这类似于“回答”问题 JQuery AJAX request behaving synchronous for unknown reason
我认为MGM观察到的并行执行的实际问题一直被忽视,实际上并行执行$ .get / $。ajax存在问题。
请看下面的代码:
$(function() {
$(".dd").each(function() {
var obj = $(this);
$.get("test.txt", function(data) {
obj.html(data);
});
});
});
它加载一个文件(我希望是异步的)并显示它(当然是同步的)。
但是,代码在第一页加载和页面刷新期间执行的方式不同。我在Windows上的Firefox 4.0中使用firebug Net面板监视对服务器的请求。在第一页加载(或使用Ctrl-F5刷新时),我可以在Net面板上看到对“test.txt”的多个请求同时启动,并且Net acivity主要是重叠的。
此部分按预期工作。结果可以在浏览器中逐个处理,但是对服务器的请求是并行执行的。
当用户按F5刷新页面时,这是完全不同的故事。突然并行性消失了。同一个网页逐个加载“test.txt”。
如果用一个简单的警报替换数据显示(obj.html(data);),那就更清楚了:alert(data);在初始页面加载时,我同时在屏幕上收到多条警报消息。后续刷新(F5)清楚地表明,当屏幕上显示一条警报消息时,不会执行任何其他下载(我可以删除该文件以查看下一个“$ .get”失败)。
所以实际上$ .get不会执行异步。调用服务器。
有关为何发生此事的任何想法?
P.S。抱歉系统不允许我发布图片使用提供的URL来查看截图。
答案 0 :(得分:0)
经过各种测试后,我倾向于同意$ .get / $。ajax可以异步工作。
如果服务器不立即响应但需要一些时间来处理请求,则相同的代码完全异步工作。 由于服务器上的人工延迟,服务器上收集的日志显示请求是并行的,无论是初始页面加载还是后续刷新。 Firebug显示相同的内容:对服务器的调用是重叠的。
较短的请求似乎太快,浏览器“决定”在开始下一次呼叫之前处理响应。
正如已经指出的,异步并不意味着完全并行。