【发布时间】:2010-12-04 18:04:19
【问题描述】:
处理乱序 Ajax 请求的最佳方法是什么(最好使用 jQuery)?
例如,每当字段更改时,用户的浏览器都会发送 Ajax 请求。用户可能将dog_name 更改为“Fluffy”,但片刻之后,她将其更改为“Spot”。第一个请求由于某种原因被延迟,所以它在第二个之后到达服务器,她的狗最终被称为“Fluffy”而不是“Spot”。
我可以将客户端时间戳与每个请求一起传递,并让服务器将其作为每个 Dog 记录的一部分进行跟踪,并忽略先前更改同一字段的请求(但前提是差异小于超过 5 分钟,以防用户更改她机器上的时间)。
这种方法是否足够稳健,还是有更好、更标准化的方法?
编辑:
马特在他的评论中提出了一个很好的观点。将请求序列化以更改相同的字段要好得多,那么有没有标准的方式来实现 Ajax 请求队列?
编辑#2
针对@cherouvim 的评论,我认为我不必锁定表单。字段更改以反映用户的更改,将更改请求放入队列中。如果更改同一字段的请求正在队列中等待,请删除该旧请求。我仍然需要解决两件事:
将请求放入队列是一项异步任务。我可以让前一个 Ajax 请求的回调处理程序发送队列中的下一个请求。 Javascript 代码不是多线程的(或者……是吗?)
如果请求失败,我需要用户界面来反映上次成功请求的状态。因此,如果用户将狗的名字更改为“Spot”并且 Ajax 请求失败,则必须将该字段设置回“Fluffy”(最后一个成功提交的值)。
我遗漏了哪些问题?
【问题讨论】:
-
更简单:不允许多个同时请求同一字段。如果更改发生得如此之快,请将它们排队。
-
@Matt Ball:你如何“锁定”客户的整个 display-form-push-changes 对话?这不是一个请求/响应周期,而是两个。
标签: ajax http jquery asynchronous