2

如果我提出 AJAX 请求,它将显示在 Chrome 的网络选项卡中。如果我同时进行基于客户端的重定向,AJAX 请求将被取消。但是请求会到达服务器并正常执行吗?HTTP/TCP 中是否知道客户端已取消请求?我不这么认为,但我想确定一下。

4

2 回答 2

1

如果您在服务器端运行 PHP,它将客户端中止时停止处理。(根据我的阅读,其他服务器端技术并非如此,它会在客户端中止后继续处理。)请参阅:

http://php.net/manual/en/features.connection-handling.php

但是,最好不要以某种方式假设任何事情。浏览器可能会取消请求。并且这种取消可能会发生在服务器端停止处理的时间。但是,情况不一定如此。客户端可以在请求期间的任何阶段取消 - 从实际发送请求之前到发送响应正文之后。还要记住,还有其他一些事情会中断服务器端的请求处理(硬件、电源、操作系统故障等)。期待一些不可预测性。

由此,我提出两个建议:

  • 编写代码尽可能保证事务安全。如果请求进行了数据更改,请在所有更改都通过管道传输到数据库之前不要提交它们。如果您的应用程序依赖多个 AJAX 请求来更改某些数据,请不要提交任何更改,直到“最终”AJAX 请求结束。

  • 即使请求完成,也不要假设客户端会收到响应。在我的脑海中,这意味着如果您的应用程序是 AJAX-heavy,请始终依赖客户端状态来告诉服务器它拥有什么信息,而不是依赖服务器端状态来假设客户端“知道”某些东西。

于 2012-12-03T17:00:55.390 回答
1

async: false这是同步请求(在$.ajax(...)选项中)适用的少数情况之一。这通常可以避免浏览器在请求完成之前导航到其他页面。

于 2012-12-03T16:46:06.427 回答