2012-09-11 33 views
5

在我的应用程序,当用户请求一个报告jQuery AJAX(使用​​)调用一个文件,进行了大量的数字处理和MySQL请求。它通常需要5-6秒才能加载,并且.ajaxStart().ajaxStop()用于在加载期间显示加载gif。取消AJAX请求减慢后续导航

问题:

如果用户点击“生成报告”按钮,然后改变了主意,尝试导航到另一个网页应用程序挂起,并不导航到新页面5-6秒。我可以从删除加载gif中发现.ajaxStop()在尝试导航到新页面时立即触发,但似乎ajax请求在浏览器加载下一页之前完成。

这是正常的行为吗?有关如何解决/重组这个问题的任何建议?

+0

我只是觉得我会评论并告诉你,你并不孤单!我有这个确切的问题。从Chrome的检查器和Firebug中,浏览器取消了使用AJAX制作的待处理网络请求,并且只有下一页的“新”请求为“待处理”。然而它似乎仍然会在实际选择离开之前持续5-10秒。 –

+0

与此相同:浏览器总是延迟,直到现有的ajax请求完成。即使不再需要回应。 – CoreyOConnor

+0

您是否使用任何通过跨域请求添加OpenID凭据的库? – CoreyOConnor

回答

0

我相信.ajaxStop()只会取消一个ajax请求,如果beforeSend回调返回false。在这种情况下,呼叫尚未启动且服务器尚未收到请求。一旦请求被发送到服务器,页面不再控制请求直到它返回。 .ajaxStop()请求在离开页面时触发,因为最后一次Ajax调用(如果已成功完成并因此终止执行)。

如果通过在beforeSend回调函数中返回false取消上次未完成的Ajax请求,也会触发ajaxStop事件。

以上是对.ajaxStop()命令的jquery api网站的摘录。看起来,一旦呼叫完成并且请求已发送,即使用户正在导航到不同的页面,您的服务器也正在完成呼叫。如果它那么大的一个呼叫,它可能会导致你遇到的延迟。

希望这会有所帮助。

+2

我相信他们更担心浏览器仍然等待AJAX​​请求返回,即使他们试图导航到另一个页面。是的,无论如何,服务器都无法停止并快速处理请求。但浏览器应该已经停止_caring_。它不应该等待请求返回。 –