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

问题描述 投票:20回答:8

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

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

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

?

php jquery ajax bash shell
8个回答
14
投票

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

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


15
投票

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

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


2
投票

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


1
投票

不同的设置,Web服务器,操作系统等。

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


0
投票

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


0
投票

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


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.