2009-04-28 125 views

回答

7

不,绝对没有简单的方法。

我能想到一些复杂的方法,但它们不可靠。

你可能有更多的运气开发倒车的过程从请求你刚刚运行(我假定这就是你想停止它的原因。)

+0

发现xhr.abort()

解决方案提示的原因是从占用资源,没有真正经过修改的DB做停止一个漫长的过程。 thx回复 – AndreLiem 2009-04-28 21:06:07

0

最简单的变化方式只是发送一个503(或类似的)HTTP响应标头并中止服务器端应用程序(或者只是中止应用程序)。假设没有数据发送和/或您检查了HTTP响应头客户端,您可以将其视为失败的请求。

0

简短答案是“否”。除非你在谈论服务器端的长时间运行后台进程,在这种情况下,你可能会有第二个Ajax请求启动一个停止。但是,如果您正在讨论对Apache/PHP服务器的常规请求,那么请不要...确定您的请求运行在哪个Apache线程上就足够麻烦了。

在启动过程之前,以某种方式验证您的Ajax请求会容易得多;确保它是你想要运行的。如果你需要用户知道他们正在做的事情不能被打断,你也可以有一个Javascript确认过程。

正如史蒂文张贴,有一个逆转过程听起来像它也可能是你最好的利益。

4

启动另一个Ajax请求。我发现这个线程试图找出如何防止在调用另一个请求时中断先前的请求。

1

没有什么好的方法可以通过网络自行停止请求(正如很多人所说的那样),但是阻止请求的效果相对容易。例如

在服务器端:您可以通过不断检查全局变量(充当标志)(如cookie或会话)(您可以通过exit(或任何您需要杀死脚本的术语)脚本的执行)。此外,您可以将文件或数据库条目保存为标志(您可以查询是否存在)。在客户端:你可以调用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 
-1

如何发送另一个Ajax请求,将改变它是由漫长的过程监控特定$_SESSION变种?

0

对于PHP我找到了一种方法来停止或中止使用session_write_close();。只需在脚本中输入session_start()即可。如果您正在使用framwework或OOP,请将其保留为方法的第一行。发生这种情况是因为会话数据被锁定,直到ajax完成。

测试&看到了另一个页面中现在载入后点击这里 Abort Ajax requests using jQuery