Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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 如果由window.onbeforeunload触发,异步ajax查询是否会完成?_Javascript_Jquery_Ajax_Asynchronous_Window.onunload - Fatal编程技术网

Javascript 如果由window.onbeforeunload触发,异步ajax查询是否会完成?

Javascript 如果由window.onbeforeunload触发,异步ajax查询是否会完成?,javascript,jquery,ajax,asynchronous,window.onunload,Javascript,Jquery,Ajax,Asynchronous,Window.onunload,我已经对此进行了测试,看起来即使页面卸载,异步操作也会完成,不管选项卡是否关闭或选项卡是否导航到新的url。然而,它调用的服务器非常快 当异步进程正在运行且选项卡正在关闭时,幕后的进程是什么?在页面已启动的异步进程上,浏览器会在哪一点调用它退出?您不能依赖服务器之间的onbeforeunload和onunload中的异步调用行为 我们有一个与Apache服务器一起运行的应用程序——在我们的开发环境中是Windows,在发布版本中是Unix。事实证明,当服务器被配置为在线程中处理请求时(Windo

我已经对此进行了测试,看起来即使页面卸载,异步操作也会完成,不管选项卡是否关闭或选项卡是否导航到新的url。然而,它调用的服务器非常快


当异步进程正在运行且选项卡正在关闭时,幕后的进程是什么?在页面已启动的异步进程上,浏览器会在哪一点调用它退出?

您不能依赖服务器之间的onbeforeunload和onunload中的异步调用行为

我们有一个与Apache服务器一起运行的应用程序——在我们的开发环境中是Windows,在发布版本中是Unix。事实证明,当服务器被配置为在线程中处理请求时(Windows/dev框的默认设置),Ajax将始终完成;当它被配置为在进程中处理请求时(Unix/prod环境的默认设置),它总是会取消

发生的情况是,Ajax请求触发,然后浏览器卸载页面,从而关闭Ajax回复的连接。我们设置了一个测试,Ajax调用将在服务器上执行4秒钟的“睡眠”,以避免任何时间问题。对于线程化后端,Apache直到从“睡眠”返回后才注意到客户端关闭了连接,而对于子进程后端,它立即中止了Ajax调用

答案是在on[before]unload事件处理程序中使用同步请求。这将保持页面打开,直到请求完成。这意味着页面切换/重新加载/返回时会有额外的延迟


…而且您也不能保证下一页会看到该请求的结果-似乎有些浏览器会在触发onunload事件之前获得下一页!但这是另一个问题的主题。

您不能依赖服务器之间的onbeforeunload和onunload中的异步调用行为

我们有一个与Apache服务器一起运行的应用程序——在我们的开发环境中是Windows,在发布版本中是Unix。事实证明,当服务器被配置为在线程中处理请求时(Windows/dev框的默认设置),Ajax将始终完成;当它被配置为在进程中处理请求时(Unix/prod环境的默认设置),它总是会取消

发生的情况是,Ajax请求触发,然后浏览器卸载页面,从而关闭Ajax回复的连接。我们设置了一个测试,Ajax调用将在服务器上执行4秒钟的“睡眠”,以避免任何时间问题。对于线程化后端,Apache直到从“睡眠”返回后才注意到客户端关闭了连接,而对于子进程后端,它立即中止了Ajax调用

答案是在on[before]unload事件处理程序中使用同步请求。这将保持页面打开,直到请求完成。这意味着页面切换/重新加载/返回时会有额外的延迟

…而且您也不能保证下一页会看到该请求的结果-似乎有些浏览器会在触发onunload事件之前获得下一页!但这是另一个问题的主题。

的可能重复。的可能重复。