显然我使用
var x=ajax.....
if(x){x.abort();}
但是这不会导致我的php文件内发生中止,顺便提一下,虽然选项默认为ignore_user_abort(false),但它仍然没有中止执行。
也就是说,如果连接断开,则脚本将不会继续执行。
问题在于,尽管js客户端上的ajax中止了,但似乎它仍在执行代码。
如何通过js成功停止客户端和服务器端的php。
在大多数情况下,AJAX 的工作方式并不是这样的。一旦请求被发送到服务器,服务器就开始处理它了。即使 PHP 被设置为在客户端连接中断时停止脚本执行,在 Web 服务器配置中,它也不会进行检查,直到实际尝试将输出发送给客户端。因此,如果您正在执行典型的 AJAX 类型脚本,其中只有一个输出事件,客户端中止对服务器端没有任何影响。
xhr.abort()
后,您必须发送一个请求到类似于 /abort/jobId
的地址,以查找它是否能够在处理完之前中止。abort()
后立即停止。
ignore_user_abort()
在断开连接时不会立即终止,需要一定时间让Web服务器意识到断开连接的发生,并将其传递给PHP。发送输出有助于更快地获得它,例如在json或html上下文中输出大量空格(=不影响呈现/功能)可以更早地检测到。 - Wrikken