处理顺序错误的Ajax请求(最好使用jQuery)的最佳方法是什么?
例如,只要字段发生变化,就会从用户的浏览器发送Ajax请求。用户可能会将dog_name
更改为“绒毛”,但过了一会儿,她将其更改为"Spot“。第一个请求由于任何原因被延迟,所以它在第二个请求之后到达服务器,她的狗最终被称为“毛茸茸”而不是“点”。
我可以将客户端时间戳与每个请求一起传递,并让服务器将其作为每个Dog
记录的一部分进行跟踪,并忽略先前更改相同字段的请求(但只有在用户更改计算机上的时间时,只有在差异小于5分钟的情况下)。
这种方法是否足够健壮,还是有一种更好、更标准化的方法?
编辑:
马特在他的评论中提出了一个很好的观点。序列化请求以更改同一个字段要好得多,那么是否有一种实现Ajax请求队列的标准方法?
编辑#2
对于@cherouvim的评论,我不认为我需要锁定表单。字段更改以反映用户的更改,将更改请求放入队列中。如果队列中正在等待更改相同字段的请求,请删除该旧请求。我还有两件事要解决:
我错过了什么问题?
发布于 2010-12-04 18:11:11
首先,您需要序列化每个客户端的服务器端处理。如果您正在用Java编程,那么同步http会话对象上的执行就足够了。当第一个更新正在处理时,序列化将有所帮助。
在实体更新中可以实现的第二个增强是http://en.wikipedia.org/wiki/Optimistic_concurrency_control。为实体添加一个version
属性(和列)。每次更新发生时,都会增加一次。实际上,update语句看起来如下:
update ... set version=6 ... where id=? and version=5;
如果上述伪查询查询中受影响的行为0,则其他人已设法首先更新该实体。你这样做是由你自己决定的。请注意,您需要在实体的html更新表单上将版本呈现为隐藏参数,并在每次更新时将其发送回服务器。返回时,您必须将更新的版本写回去。
一般来说,第一次增强就足够了。第二个方案将改进系统,以防许多人同时编辑相同的实体。它解决了“丢失更新”的问题。
发布于 2010-12-04 22:17:22
我将在客户端实现一个队列,将成功的请求链接起来,或者对不成功的请求进行回滚。
您需要定义“不成功”,无论是超时还是返回值。
https://stackoverflow.com/questions/4354983
复制相似问题