LMLPHP后院

Ajax 并发回调的顺序问题技术

maybe yes 发表于 2018-07-09 18:00

Ajax 并发请求时,特别是遇到了网络很不稳定的情况下,如何处理回调函数顺序问题。这个问题很难搜索,被某个搜索引擎理解成了 promise 的问题,翻了几页全是关于 Ajax 请求然后再请求然后再请求等等无限下去的写法问题,醉了醉了。

举个?栗子,大家一定就明白了。

某些银行发验证码会写明验证码的序号,这个就是方便短信延迟同时收到很多短信的时候,用户不知道填写哪一个?我讲的就是这个问题。

这个问题虽然在很多搜索提示的时候是必须解决的,当然市面上的网站至少 80% 没有解决,因为搜索提示功能出现这个问题的概率太大了。而我要说的这个问题是在某些情况下,特别是 Ajax 局部刷新的情况下,概率很小的情况下才会发生的,所以这个情况很多时候被忽略了,所以一拖再拖,一直没有时间去做这个东西,而不是不知道解决方法

最简单的方法当然是接口传参数,这个方法肯定是可行的,但是麻烦阿,需要后端支持阿,能不能更简单一些?

前端应该是可以解决这个问题的,试了下 Jquery 的 Ajax,在 beforeSend 里面的 this 和 callback 里面的 this 都是指向同一个对象,既然 Jquery 的 Ajax 设计能很好的支持,那当然前端就可以解决啦。

代码

$.ajax({
    "method":"POST",
    "beforeSend": function(xhr){
        s('last_ajax_req',this);
    },
    "url":url,
    "data":data
})
.done(function(r){
    if(s('last_ajax_req')===this){
        callback(r);
    }
});

在端处通过对象的比较来过滤延迟的 callback,算是不错的方式吧。

好久没有更新了。

2019-12-14 19:12:22 1576321942 0.040176