我想知道是否有一种简单的方法可以取消 AJAX 请求?
除了在客户端调用 XMLHTTPRequest 的“中止”之外,有没有办法轻松停止服务器进程?服务器正在使用 Apache。
谢谢
我想知道是否有一种简单的方法可以取消 AJAX 请求?
除了在客户端调用 XMLHTTPRequest 的“中止”之外,有没有办法轻松停止服务器进程?服务器正在使用 Apache。
谢谢
不,绝对没有简单的方法。
我可以想到一些复杂的方法,但它们是不可靠的。
您可能会更幸运地开发一个流程来扭转您刚刚运行的请求的更改(我假设这就是您想要停止它的原因。)
启动另一个 Ajax 请求。我通过试图弄清楚如何防止先前的请求在另一个请求被调用时被中断而找到了这个线程。
没有好的方法可以通过网络停止请求本身(正如许多人所说),但是停止请求的影响相对容易。IE
在服务器端:您可以exit
(或您需要终止脚本的任何术语)通过不断检查全局变量(充当标志),如 cookie 或会话(再次假设这些在脚本执行期间会发生变化)。此外,您可以将文件或数据库条目保留为标志(您可以轮询是否存在)。
在客户端:您可以调用abort
(这在所有浏览器中都不起作用,就像其他人所说的那样),或者您可以在回调顶部保留一个全局信号量/标志(检查全局值以查看它是否是否仍应执行)。例子:
window.ajaxIsStillGood = true;
xhr.onreadystatechange = function( )
{
if( 4 === xhr.readyState && 200 === xhr.status )
{
if( true === window.ajaxIsStillGood ){ /* still good */ }
}
}
/* bad stuff happens */
window.ajaxIsStillGood = false; // now the code won't execute
对于 PHP,我找到了一种使用session_write_close();
. 把它session_start()
放在你的脚本上。如果您使用的是框架或 OOP,请将其保留为方法的第一行。发生这种情况是因为会话数据在 ajax 完成之前被锁定。
测试并看到另一个页面现在正在加载xhr.abort()
此处找到的解决方案提示 Abort Ajax requests using jQuery
最简单的方法是发送一个 503(或类似的)HTTP 响应头并中止服务器端应用程序(或只是中止应用程序)。假设没有发送数据和/或您检查了 HTTP 响应标头客户端,您可以将其视为失败的请求。
最简洁的答案是不”。除非您在服务器端谈论一个运行时间很长的后台进程,在这种情况下,您可以让第二个 Ajax 请求在其上启动停止。但是,如果您正在谈论对 Apache/PHP 服务器的常规请求,那么不...确定您的请求在哪个 Apache 线程中运行就很麻烦了。
在开始流程之前以某种方式验证您的 Ajax 请求会容易得多;确保它是你想要运行的。如果您需要用户知道他们正在做的事情不能被打断,您也可以有一个 Javascript 确认过程。
正如史蒂文所说,有一个逆转过程听起来也可能符合你的最大利益。
如何发送另一个 Ajax 请求来更改$_SESSION
由该长进程监控的特定 var?