Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ajax更新期间离开网页_Javascript_Php_Ajax_Angularjs_Asynchronous - Fatal编程技术网

Javascript 在ajax更新期间离开网页

Javascript 在ajax更新期间离开网页,javascript,php,ajax,angularjs,asynchronous,Javascript,Php,Ajax,Angularjs,Asynchronous,当用户向服务器发送一个异步请求以更新其数据库时会发生什么情况?该请求可能需要几分钟的时间,但在更新完成之前离开了网页 服务器是否仍将更新记录到数据库或停止 我使用angularjs对LAMP堆栈进行异步调用。假设: 服务器收到了该请求 服务器可以无错误地处理它 该请求处理程序中有一个数据库更新逻辑 如果否,服务器将不会将更新记录到数据库中 正如@AD7six指出的,根据: 原因: 但是,默认行为是在远程客户端断开连接时中止脚本。 如果您不告诉PHP忽略用户中止,而用户中止,脚本将终止 选项:

当用户向服务器发送一个异步请求以更新其数据库时会发生什么情况?该请求可能需要几分钟的时间,但在更新完成之前离开了网页

服务器是否仍将更新记录到数据库或停止

我使用angularjs对LAMP堆栈进行异步调用。

假设:

  • 服务器收到了该请求
  • 服务器可以无错误地处理它
  • 该请求处理程序中有一个数据库更新逻辑
如果,服务器将不会将更新记录到数据库中

正如@AD7six指出的,根据:

原因:

但是,默认行为是在远程客户端断开连接时中止脚本。

如果您不告诉PHP忽略用户中止,而用户中止,脚本将终止

选项:

您可以决定是否希望客户端断开连接导致脚本中止。有时,即使没有远程浏览器接收输出,也可以让脚本一直运行到完成。

方法:

可以通过ignore_user_abort php.ini指令、相应的php_value ignore_user_abort Apache httpd.conf指令或ignore_user_abort()函数设置此行为


还有一个
超时
中止:

原因:

您的脚本也可以通过内置脚本计时器终止。默认超时为30秒

如果您不告诉PHP忽略用户中止,而用户中止,脚本将终止

选项:

可以使用max_execution_time php.ini指令或相应的php_value max_execution_time Apache httpd.conf指令以及set_time_limit()函数对其进行更改。


这是基本的客户机-服务器通信流:

客户端(网页、浏览器..)向服务器发送请求(同步/异步)
服务器响应客户端


服务器和客户端一样可以处理连接超时和中止。

如果客户端发送了ajax请求,然后在响应返回之前关闭,服务器端还会运行吗?当然。如果他们换到另一页怎么办?服务器是否会继续处理更新,或者是否可以同时向用户提供另一个页面?您是否可以想象一个web服务器一次只能为一个用户提供一个页面。我想这叫做浏览器。服务器应该能够同时处理多个请求。已编辑我的答案。我强烈建议你读一读,这是一个过于简单的答案,否则就不存在了。看,说得对。编辑了答案。您也可以随意编辑它,使其更加完整。尽管手册中的这一行让我感到困惑:
PHP仍然会注意到用户可能断开了连接,但脚本将继续运行。如果达到时间限制,它将被中止,并调用您的关机功能(如果有)。
是客户端请求的“脚本”还是内置脚本计时器?它仍然是“简单的”,没有那么简单。您可以将脚本配置为在用户中止时不退出,否则它在很大程度上取决于服务器端发生的情况,例如。“脚本”实际上是指服务器上的php进程;php对浏览器中正在发生的事情(如果有的话)没有直接的了解。