Javascript 停止浏览器请求

Javascript 停止浏览器请求,javascript,ajax,Javascript,Ajax,当按下刷新按钮时,是否可以停止页面上发生的所有请求/脚本? 我有一个$.ajax请求,需要几分钟时间。我尝试在卸载事件中执行window.stop();我尝试过xhr=$.ajax(…);和xhr.abort();以及在互联网上找到的任何其他方法,但都不起作用 这可能吗?为什么浏览器仍然等待该请求完成并发送回响应,而不刷新页面? 稍后编辑(已解决):似乎等待问题实际上来自服务器。如果在ajax调用中,脚本使用会话,那么网页将冻结,直到请求完成,即使我们中止xhr 为什么呢?说明: 会话数据

当按下刷新按钮时,是否可以停止页面上发生的所有请求/脚本?
我有一个$.ajax请求,需要几分钟时间。我尝试在卸载事件中执行window.stop();我尝试过xhr=$.ajax(…);和xhr.abort();以及在互联网上找到的任何其他方法,但都不起作用

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


稍后编辑(已解决):似乎等待问题实际上来自服务器。如果在ajax调用中,脚本使用会话,那么网页将冻结,直到请求完成,即使我们中止xhr

为什么呢?说明:

会话数据通常在脚本终止后存储,无需调用Session_write_close(),但由于会话数据被锁定以防止并发写入,因此在任何时候,只有一个脚本可以在会话上运行。当将框架集与会话一起使用时,由于此锁定,您将体验到逐个加载框架的过程。您可以通过在对会话变量的所有更改完成后立即结束会话来减少加载所有帧所需的时间。

在刷新之前尝试取消,如中所示


可能在刷新之前尝试取消,如中所示



如果您有一个ajax请求需要几分钟,那么您已经在那里做了一些错误的事情……浏览器不会等待现有的ajax请求。您的服务器可能正在等待(例如,等待会话)调用
。abort
应阻止XHR等待响应。你看到了什么让你说它不起作用?@s1lence我没有做错什么,它查询Facebook API和YouTube API,YouTub API上有超过一百个YouTube视频的文件“get”contents()。这就是AJAX的特点does@roshkattu:正确;浏览器不会等待。但是,如果您使用会话,服务器(PHP)将等待。如果您有一个ajax请求需要几分钟,那么您已经在那里做了一些错误的事情…浏览器不会等待现有的ajax请求。您的服务器可能正在等待(例如,等待会话)调用
。abort
应阻止XHR等待响应。你看到了什么让你说它不起作用?@s1lence我没有做错什么,它查询Facebook API和YouTube API,YouTub API上有超过一百个YouTube视频的文件“get”contents()。这就是AJAX的特点does@roshkattu:正确;浏览器不会等待。但是,如果使用会话,服务器(PHP)将等待。这确实解决了中止问题。下面是xhr.abort();结果<代码>中止前的XHR:scripts.js:497对象{readyState:1}脚本.js:498中止后的XHR:scripts.js:500对象{readyState:0,状态:0,状态文本:“ABORT”}但页面仍在等待XHR完成,然后重新加载。。这似乎是一个服务器问题…斯莱克斯在评论中告诉我above@roshkattu啊,好的。那么,您刚刚摆脱了ajax调用的php文件中的会话使用,它现在可以工作了吗?@FrankvanPuffelen他展示的代码让我觉得页面刷新时javascript间隔被取消了,所以我想确保实际上调用了abort。@vortextangent是的。在我的ajax调用中,我使用了使用会话的FacebookSDK类。因此,在我从FB类获得所需的所有会话变量后,我使用了session_write_close();获取会话并使其为只读。现在当我使用xhr.abort()时;一切都按计划进行。@vortextangent更准确地说,在session_write_close()的PHP文档中;据说:会话数据通常在脚本终止后存储,无需调用Session_write_close(),但由于会话数据被锁定以防止并发写入,因此在任何时候,只有一个脚本可以在会话上运行。当将框架集与会话(和xhr请求)一起使用时,由于此锁定,您将体验一个接一个地加载框架的过程。通过在对会话变量进行所有更改后立即结束会话,可以减少加载所有帧所需的时间。这解决了中止问题。下面是xhr.abort();结果<代码>中止前的XHR:scripts.js:497对象{readyState:1}脚本.js:498中止后的XHR:scripts.js:500对象{readyState:0,状态:0,状态文本:“ABORT”}但页面仍在等待XHR完成,然后重新加载。。这似乎是一个服务器问题…斯莱克斯在评论中告诉我above@roshkattu啊,好的。那么,您刚刚摆脱了ajax调用的php文件中的会话使用,它现在可以工作了吗?@FrankvanPuffelen他展示的代码让我觉得页面刷新时javascript间隔被取消了,所以我想确保实际上调用了abort。@vortextangent是的。在我的ajax调用中,我使用了使用会话的FacebookSDK类。因此,在我从FB类获得所需的所有会话变量后,我使用了session_write_close();获取会话并使其为只读。现在当我使用xhr.abort()时;一切都按计划进行。@vortextangent更准确地说,在session_write_close()的PHP文档中;据说:会话数据通常在脚本终止后存储,无需调用Session_write_close(),但由于会话数据被锁定以防止并发写入,因此在任何时候,只有一个脚本可以在会话上运行。当将框架集与会话(和xhr请求)一起使用时,由于此锁定,您将体验一个接一个地加载框架的过程。只要对会话变量进行了所有更改,就可以结束会话,从而减少加载所有帧所需的时间
window.onbeforeunload = function(event) {
    xhr.abort();
};