我怎样才能建立一个;“最后一个赢了”;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
        }
      };