是否保证ajax请求按顺序命中服务器?

时间:2015-07-08 19:40:49

标签: php jquery ajax nginx

来自the docs

  

Ajax中的第一个字母代表"异步,"意味着操作并行发生,完成顺序无法保证。

我将此解释为意味着您的then / done / always / fail回调不能保证按请求发出的顺序触发。如果您正在调用不同的API端点,而某些API端点需要的时间比其他端点长,那么这是有道理的。

我想知道的是,如果您向同一API端点发出ajax请求,是否可以保证按顺序到达服务器?

我已经编写了一些代码,可以在您输入时自动保存草稿,我想知道我是否保证始终保存草稿的最新副本,或者是否可能较旧的ajax请求将在较新的之后进入,然后我的PHP代码将导致较新的草稿被旧版本覆盖。请求返回的顺序并不重要;只是他们收到的订单很重要。

我可以设想一种方法来解决这个问题,我只是想知道它是否必要。

2 个答案:

答案 0 :(得分:3)

请求可以按照所涉及的网络决定传送数据包的任何顺序到达。

e.g。

请求#1在时间点0.000采用路线A
请求#2在时间点0.123采用路线B

但突然间反铲挖掘了光缆处理路径A,导致网络通过路由C重新路由,路由C使用RFC 1149运营商,导致到达时间延迟12小时。所以在服务器上,你最终得到了

请求#2到达时间点0.173,采取一个漂亮的“慢”50ms路线
请求#1到达时间点12:00:00:0.50,已经走了更长的路线。

答案 1 :(得分:2)

与异步的任何东西一样,答案是有信心的,也许!"

仅仅因为您的JavaScript引擎按特定顺序触发了一系列回调并不意味着服务器将以相同的顺序接收它们,这并不意味着它们将以相同的顺序包含它们。

如果这些请求中的一个由于数据包丢失而停止,由负载均衡器阻止,或者由于多种原因而导致延迟,这将导致其失序。由于这些事件并不罕见,最安全的赌注是它们将以随机顺序发布并以随机顺序完成。

如果你需要它们顺序发生,你必须等到一个完成才能触发下一个。