Javascript 防止";比赛条件“;使用jqueryajax调用

Javascript 防止";比赛条件“;使用jqueryajax调用,javascript,jquery,race-condition,Javascript,Jquery,Race Condition,我目前正在学习一门有点晦涩的外语,所以我制作了一个简单的网站(),这样我就可以很容易地从课堂上使用的书中查找单词。我注意到的一件事是,有时如果我输入“house”之类的内容,那么对匹配“h”的单词的请求将在请求“ho”之后完成,因此“h”的结果将覆盖“ho”的结果。如果你输入一个单词,然后很快地按退格键,这一点尤其明显。清除所有字符后,我的消息“输入一个英语单词”将弹出一秒钟,然后最后一个AJAX请求最终完成覆盖消息。有没有一种方法可以从根本上取消AJAX调用,或者我应该包括一个时间戳,可以用来

我目前正在学习一门有点晦涩的外语,所以我制作了一个简单的网站(),这样我就可以很容易地从课堂上使用的书中查找单词。我注意到的一件事是,有时如果我输入“house”之类的内容,那么对匹配“h”的单词的请求将在请求“ho”之后完成,因此“h”的结果将覆盖“ho”的结果。如果你输入一个单词,然后很快地按退格键,这一点尤其明显。清除所有字符后,我的消息“输入一个英语单词”将弹出一秒钟,然后最后一个AJAX请求最终完成覆盖消息。有没有一种方法可以从根本上取消AJAX调用,或者我应该包括一个时间戳,可以用来抛出过期的结果?

维护一个变量来标识正在进行的AJAX调用的订单号, 第一次调用1,第二次调用2,第三个字母调用3。 每当ajax请求完成时,检查输入框值的当前字符串长度。 如果它们匹配,则数据有效,将其写入页面,否则拒绝

例如: 值为3的ajax请求已完成,
输入框中的当前值=“hou”,因为hou.length==3,所以它是正确的匹配项,可以处理数据。

也可以存储一个正在运行的值数组(若需要进行高级监控)和/或最后一个值本身——若在XHR回调闭包中捕获,这非常容易。只是长度有时会导致误报:“后”和“少”。