Jquery 多次异步提交数据时如何保证返回结果为最新的一次

  • 一直以来JS 是我的软类,不过自己还是给JKGLib 配置了一个ajax 的Widget,这个Widget 可以应用到任何框架,JKG 框架,Yii …… 只要该框架引入JKG 的类库API。

    该Widget 的首次应用获得很大成功,让异步处理变得异常简单和精确。最近开发一个高可用的数据库项目,由于页面操作异常复杂,所以为了查分简化操作,有把这个Widget 引入进来,不过发现了一个问题……

    其实该问题以前就有,不过这次更加明显为什么呢?因为最近不是网络那个查得紧反暴力嘛你懂,网络慢,然后这个问题就暴露了,由于Ajax 使用的都是异步请求,这时我对页面进行快速点击,然后问题就是,先发出去的请求有时候却后返回,这个的确很正常,因为是异步的你无法确定请求什么时候返回。

    但是页面就乱的没法要,因为是数据库条件查询,比如我先点击的是id=2 的数据,然后点击id=3,但是id=3 的却先返回了,然后id=2 的返回了,页面区域被刷新到id=2,但是按钮停留状态却是id=3 ,当然这是个举例,不过状况就是如此。

    常规解决办法,一般是请求中屏蔽按钮,或者弹出图层屏蔽整个页面,不过这有个问题,就是屏蔽按钮的话我的Widget 不适用,因为该Widget 为了保证松耦合的状态,仅仅和POST 绑定,如果绑定按钮的话不符合设计原则。屏蔽整个页面的做法,可以保证松耦合不过页面遮盖会屏蔽太多操作,用户体验受到影响。

    最后我修改了Widget 让我的Widget 更加完美,从效果上来说,如果对某个区域进行刷新的话就算你无数个按钮点击,那么返回的结果仅仅是最后一次的。就是正确的那次,原理上其实也简单,这里说一下思路。

    问题是这样分析的,首先是这个异步请求时你确定的是什么?不确定的是什么?要做的就是通过确定的去限制不确定的。就是说我会创建一个跟踪变量,这个变量实际上是一个随机值,那么我们在可以确定的部分就是POST 发出的部分,来记录这个值,这个值总是最新的也就是最后发送的那个,那么回来的时候这时候顺序可就乱了,但是不要急,回来的时候也要比对这个值,只有最新的那个值被返回填充,其余的就放弃了。

    提示一下,通过闭包来解决作用域的问题。

    文章“Jquery 多次异步提交数据时如何保证返回结果为最新的一次”由大口罩的BLOG提供,转载请注明出处 http://blog.cancanyou.com/

回复位置:
主贴
访客名称(不可修改):
联系Email(可选,如果有必要我会根据此Email给您回复):
回复内容描述(必选,1000字符以内):
提示:某些回复内容可能稍后通过审核后才会被显示
  • ADs
Copyright 2012 cancanyou.com 大口罩的生活领地,欢迎来访,管理员“口罩下的笑”交流Email: meetcancanyou@yahoo.com
京ICP备13030527号-2