2013-01-04 217 views
0

当点击刷新按钮时是否可以停止页面上发生的所有请求/脚本?
我有一个花费几分钟的$ .ajax请求。我试图在卸载事件中执行window.stop()。我试过xhr = $ .ajax(...);和xhr.abort();以及在互联网上找到的任何其他方法,并且没有任何效果

这可能吗?为什么浏览器仍然等待该请求完成并发回响应而不刷新页面?


以后编辑(解决):似乎等待的问题其实是从服务器。如果在ajax调用中,脚本使用SESSION,则网页将冻结,直到请求完成,即使我们中止xhr。

这是为什么?说明:

会话数据通常在脚本终止后存储,无需调用session_write_close(),但由于会话数据被锁定以防止并发写入,因此只有一个脚本可以随时在会话上运行。将帧集与会话一起使用时,由于此锁定,您将体验逐帧加载的帧。只要完成对会话变量的所有更改,就可以通过结束会话来缩短加载所有帧所需的时间。
停止浏览器请求

+0

如果你有一个Ajax请求采取多分钟,你做错了什么已经有... – s1lence

+4

浏览器不会等待现有的AJAX请求。您的_server_可能正在等待(例如,对于会话) – SLaks

+0

调用'.abort'应该停止XHR等待响应。你看到什么让你说它不起作用? –

回答

4

也许尝试在刷新之前立即取消,如here

window.onbeforeunload = function(event) { 
    xhr.abort(); 
}; 
+0

OP说他已经叫'abort()' –

+0

对不起,那没用。我已经试过 – roshkattu

+0

事实上,这解决了_abort_问题。这里是_xhr.abort(); _ result'XHR BEFORE ABORT:scripts.js:497 Object {readyState:1} scripts.js:498 XHR AFTER ABORT:scripts.js:500 Object {readyState:0 ,status:0,statusText:“abort”} '但页面仍然等待XHR完成,然后重新加载..似乎它是一个服务器问题...... Slaks告诉我在上面的评论 – roshkattu