如果用户在 AJAX 请求结束之前退出浏览器或更改页面,会发生什么情况

2022-08-30 19:10:25

我在ajax上调用php脚本来做一些数据库维护。如果用户关闭页面,回击或单击链接,php脚本是否会完全执行?有没有办法做到这一点?

也许如果php脚本调用了该方法或类似的东西,那么它将通过控制台调用脚本,如下所示:exec()

$ php /var/www/httpdocs/maintenance.php

?


答案 1

这是一个竞争条件。PHP会在某个时候(通常在尝试输出时)检测到Apache当着它的面大喊大叫,远程用户已经关闭了连接。您想做的所有事情是否都在那时完成取决于您的代码的结构。

如果要确保在脚本自行关闭之前完成所有操作,请使用ignore_user_abort(TRUE),它在连接断开后保持PHP运行。它仍然受用户max_execution_time限制等限制的约束,但它不会因为您断开连接而关闭。


答案 2

只要用户代理(浏览器等)已经完全发送了请求,服务器就拥有了它所需要的一切,并将完成请求并尝试发回响应。

实际上,这种“pinging”行为通常用于“检测信号”类进程,这些进程使服务保持温暖或执行定期维护。


推荐