我怎样才能建立一个;“最后一个赢了”;jqueryajax队列?
假设一个页面上有三个元素:我怎样才能建立一个;“最后一个赢了”;jqueryajax队列?,jquery,queue,jquery-deferred,promise,Jquery,Queue,Jquery Deferred,Promise,假设一个页面上有三个元素: 接受数字联系人ID的文本框 单击该按钮时,将向服务器发出Ajax请求,以获取输入到文本框中的联系人ID的联系人信息 显示从服务器获取的联系人信息的div 现在再假设两件事: 预计从服务器往返需要5秒钟 如果在5秒延迟期间,用户在文本框中输入不同的数字,并单击按钮,则网页应忽略第一个ajax结果,并接受第二个结果(即最近的ajax请求) 我的问题: 我如何实现我所描述的“Last One Wins”jQueryAjax队列? 我会使用或帮助我解决这个问题吗
- 接受数字联系人ID的文本框
- 单击该按钮时,将向服务器发出Ajax请求,以获取输入到文本框中的联系人ID的联系人信息
- 显示从服务器获取的联系人信息的
div
- 预计从服务器往返需要5秒钟
- 如果在5秒延迟期间,用户在文本框中输入不同的数字,并单击按钮,则网页应忽略第一个ajax结果,并接受第二个结果(即最近的ajax请求)
我的问题:
- 我如何实现我所描述的“Last One Wins”jQueryAjax队列?
- 我会使用或帮助我解决这个问题吗
- 您只需在成功回调中处理所有问题。在回调中检查的第一件事是是否输入了新信息,如果输入了,就让新信息获胜。否则,请查看请求的结果
如果必要的话,应该很容易设置标志。无论何时发送新请求,都要使用该标志。在成功回调中使用它。您可以同步执行此操作,因为在某种意义上,“最后一个胜出”是同步执行的正常状态。但与承诺异步要灵活得多,这一点您已经学会了。我从特雷弗·伯纳姆(Trevor Burnham)的新书中得到了很多关于承诺的好代码示例。这也可能对你有帮助。
ResponsibleObject = {
lastAjaxId: 0,
onChangeSomething: function() {
var ajaxObject = $.ajax({
// some settings
success:this.ajaxCallback
});
ajaxObject.__id = ++this.lastAjaxId;
},
ajaxCallback: function(data, textStatus, jqXHR) {
if (jqXHR.__id != ResponsibleObject.lastAjaxId) {
return false;
}
// put your code here
}
};