如果我要进行AJAX请求,它将显示在Chrome的网络标签中。如果我在同一时刻进行基于客户端的重定向,则AJAX请求将被取消。但请求是否会将其发送到服务器并正常执行?在HTTP / TCP中是否知道客户端已取消请求?我不这么认为,但我想确定。
答案 0 :(得分:1)
这是同步请求(async: false
选项中$.ajax(...)
)适当的少数情况之一。这通常会避免浏览器在请求完成之前导航到其他页面。
答案 1 :(得分:1)
如果您正在运行PHP服务器端,则将在客户端中止时停止处理。 (据我所知,其他服务器端技术并非如此,在客户端中止后将继续处理。)请参阅:
http://php.net/manual/en/features.connection-handling.php
但是,最好不要以某种方式假设。浏览器可能取消请求。并且此取消可能及时发生以停止处理服务器端。但是,情况不一定如此。客户端可以在请求期间的任何阶段取消 - 从实际发送请求之前到发送响应正文之后。还要记住,还有其他可能会中断服务器端请求处理(硬件,电源,操作系统故障等)的事情。 期待一些不可预测性。
由此,我提出两点建议:
尽可能将代码编写为事务安全。如果请求进行了数据更改,则在将所有更改传送到数据库之前不要提交它们。如果您的应用程序依赖多个AJAX请求来更改某些数据,则在“最终”AJAX请求结束之前不要提交任何更改。
即使请求完成,也不要假设客户端收到响应。我的头脑,这意味着如果您的应用程序是AJAX重的,请始终依赖客户端状态告诉服务器它有什么信息,而不是依靠服务器端状态来假设客户端“知道”某些东西。