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

时间:2012-01-18 20:08:20

标签: php jquery ajax bash shell

我通过ajax调用php脚本来进行一些数据库维护。如果用户关闭页面,点击或点击链接,php脚本是否会完全执行?有办法吗?

也许如果php脚本调用了exec()方法或类似的东西,它会依次通过控制台调用脚本:

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

8 个答案:

答案 0 :(得分:15)

这是竞争条件。 PHP将在某些时候(通常在尝试输出时)检测到Apache正在大吼大叫,远程用户已经关闭了连接。您是否想要在此处完成所有操作取决于代码的结构。

如果要在脚本自行关闭之前确保所有操作都已完成,请使用ignore_user_abort(TRUE),这会在断开连接后保持PHP运行。它仍受用户max_execution_time限制和诸如此类的限制,但由于您已断开连接,因此不会关闭。

答案 1 :(得分:14)

只要用户代理(浏览器等)已完全发送请求,服务器就会完成所有需求并完成请求并尝试发送回复。

事实上,这种“ping”行为通常用于“心跳”式进程,使服务保持温暖或执行定期维护。

答案 2 :(得分:2)

一旦Web请求进入您的服务器,用户关闭浏览器或导航就无所谓了。您的服务器仍会响应,但没有人会听取响应。

答案 3 :(得分:1)

在设置,Web服务器,操作系统等方面有所不同。

通常,请求将照常处理,并且永远不会读取响应。有时,写入可能会提前失败,并且请求在处理时失败。

答案 4 :(得分:0)

一旦ajax呼叫启动,用户可以随心所欲地做任何事情。如果他们关闭页面,他们就不会从ajax调用中获得反馈(如果有的话)。

答案 5 :(得分:0)

如果php开始执行,那么无论用户是关闭窗口还是导航离开页面,它都会继续执行。

答案 6 :(得分:0)

无论浏览器状态如何,php脚本都将完成。 php在服务器上解析,而不关心客户端是否仍然打开。

答案 7 :(得分:0)

如果HTTP请求已完成,那么即使客户端的计算机已关闭,PHP脚本也将完全执行。

相关问题