Extjs ajax请求以无序方式返回

时间:2016-09-23 17:24:39

标签: javascript ajax extjs

我的应用程序执行查询代码。 用户输入3947代码。

对于每种类型,查询在这种情况下有四个查询。 但由于请求是异步的,因此有时最后一个到达其他请求。 因此,最后返回的记录是394而不是3947

如何确保最后一次约会到最后?

listeners: {
    change: function (sender, newValue, oldValue, eOpts) {
        loadData();
    }
}

2 个答案:

答案 0 :(得分:1)

以简化的方式,您可以忽略所有请求,并以这种方式仅执行最后一次:

listeners: {
    change: function (sender, newValue, oldValue, eOpts) {
        if (call_request) clearTimeout(call_request);       
        call_request = setTimeout(loadData, 750);
}}

答案 1 :(得分:0)

使用extjs非常简单,您可以使用缓冲区。例如,以下代码将创建500毫秒的缓冲间隔,然后键入新字母以等待触发'更改'事件。所以,如果你输入的速度足够快,那么在你完成之前它不会发生变化事件。您可以根据需要使用缓冲区数量

listeners: {
  change: {
     buffer: 500,
     fn: function (sender, newValue, oldValue, eOpts) {
         loadData();
     }
  }
编辑:我再次阅读你的帖子,我可能会被误解。所以我正在为另一个案件提供解决方案,这可能是你的问题。如果您要为每个键入的号码发送AJAX请求,因为它是异步的,您无法知道哪些号码会在何时到达。但是你肯定会通过一些简单的代码改变来阻止它。例如,你可以使用promises,这应该有效:

// lets define loadData (just an example)
var job = new Promise(function(resolve, reject){
     resolve();
});

var loadData = function(){
     return new Promise(function(resolve, reject){
          // do your job and when it finishes(can be async), call resolve
          // ...
          resolve();
     });
};

// listener
change: function(){
    job = job.then(function(){
        return loadData();
    });
}