首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理不合顺序的Ajax请求?

如何处理不合顺序的Ajax请求?
EN

Stack Overflow用户
提问于 2010-12-04 18:04:19
回答 2查看 790关注 0票数 3

处理顺序错误的Ajax请求(最好使用jQuery)的最佳方法是什么?

例如,只要字段发生变化,就会从用户的浏览器发送Ajax请求。用户可能会将dog_name更改为“绒毛”,但过了一会儿,她将其更改为"Spot“。第一个请求由于任何原因被延迟,所以它在第二个请求之后到达服务器,她的狗最终被称为“毛茸茸”而不是“点”。

我可以将客户端时间戳与每个请求一起传递,并让服务器将其作为每个Dog记录的一部分进行跟踪,并忽略先前更改相同字段的请求(但只有在用户更改计算机上的时间时,只有在差异小于5分钟的情况下)。

这种方法是否足够健壮,还是有一种更好、更标准化的方法?

编辑:

马特在他的评论中提出了一个很好的观点。序列化请求以更改同一个字段要好得多,那么是否有一种实现Ajax请求队列的标准方法?

编辑#2

对于@cherouvim的评论,我不认为我需要锁定表单。字段更改以反映用户的更改,将更改请求放入队列中。如果队列中正在等待更改相同字段的请求,请删除该旧请求。我还有两件事要解决:

  1. 将请求放入队列是一个异步任务。我可以让来自上一个Ajax请求的回调处理程序在队列中发送下一个请求。Javascript代码不是多线程的(或者.如果请求失败,我需要用户界面来反映上一个成功请求的状态。因此,如果用户将狗的名称更改为"Spot“,而Ajax请求失败,则必须将字段设置为"Fluffy”(最后一个成功提交的值)。

我错过了什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-04 18:11:11

首先,您需要序列化每个客户端的服务器端处理。如果您正在用Java编程,那么同步http会话对象上的执行就足够了。当第一个更新正在处理时,序列化将有所帮助。

在实体更新中可以实现的第二个增强是http://en.wikipedia.org/wiki/Optimistic_concurrency_control。为实体添加一个version属性(和列)。每次更新发生时,都会增加一次。实际上,update语句看起来如下:

代码语言:javascript
运行
复制
update ... set version=6 ... where id=? and version=5;

如果上述伪查询查询中受影响的行为0,则其他人已设法首先更新该实体。你这样做是由你自己决定的。请注意,您需要在实体的html更新表单上将版本呈现为隐藏参数,并在每次更新时将其发送回服务器。返回时,您必须将更新的版本写回去。

一般来说,第一次增强就足够了。第二个方案将改进系统,以防许多人同时编辑相同的实体。它解决了“丢失更新”的问题。

票数 3
EN

Stack Overflow用户

发布于 2010-12-04 22:17:22

我将在客户端实现一个队列,将成功的请求链接起来,或者对不成功的请求进行回滚。

您需要定义“不成功”,无论是超时还是返回值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4354983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档