在不阻止页面加载的情况下发出ajax请求

时间:2011-07-03 21:21:08

标签: google-chrome jquery

我需要在页面加载时进行非常慢的ajax调用。问题是在Chrome中,标签上的小圆圈一直在旋转,直到ajax调用完成。在Firefox 4和IE9中它按预期工作。

目前我正在使用

$(document).ready(function () {
   $.doTimeout(1000, slowRequest);
});

超时有帮助,因为它允许浏览器继续,如果浏览器在超时之前完成一切都很好,但我发现根据客户端/服务器的速度,超时可能不够长。

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

老实说,我认为您不应该关心浏览器上的旋转圈,而是关心代码的执行顺序。 我只想做:

$(document).ready(function () {
   slowRequest();
});

或者,setTimeout(slowRequest, 0);,重点是当您已经有要发送的数据以及从哪里接收数据时启动您的ajax请求。

延迟1秒后,你会在某些浏览器中避开旋转圈,但会牺牲时间(延迟1秒!)。我认为执行时间比视觉细节更重要。

当然,你的ajax请求必须是异步的(我希望它是),如果没有,浏览器将会挂起。

希望这会有所帮助。干杯

答案 1 :(得分:0)

由于您提到了Chrome发生的问题,因此在script标记上包含了进行慢速AJAX调用的代码,您可以尝试添加async属性,如下所示:

<script type="text/javascript" async="async">
...
</script>

我认为该属性适用于Firefox 3.6+和Chrome,但不适用于任何其他浏览器:(