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


What happens if a user exits the browser or changes page before an AJAX request is over

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

也许如果php脚本调用了exec()方法或类似的方法,它会通过控制台调用一个脚本,如下所示:

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

这是一个竞赛条件。PHP会在某个时刻(通常是在尝试输出时)检测到Apache当面大喊远程用户已经关闭了连接。你想做的每件事是否都在这一点上完成取决于你的代码的结构。

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

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

事实上,这种"ping"行为通常用于保持服务热度或执行定期维护的类似"心跳"的进程。

一旦web请求到达服务器,用户是否关闭浏览器或导航离开都无关紧要。您的服务器仍将响应,但没有人会侦听响应。

因设置、web服务器、操作系统等而异。

通常,请求会像往常一样被处理,而响应永远不会被读取。偶尔,写入操作可能会提前失败,并且请求在处理时会失败。

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

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

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

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

相关文章: