Javascript ExtJS:ajax击键调用不起作用,而另一个调用存在

Javascript ExtJS:ajax击键调用不起作用,而另一个调用存在,javascript,ajax,extjs,Javascript,Ajax,Extjs,因此,我遇到了一种情况,在击键后进行ajax调用(使用缓冲区:150)。如果(出于任何原因)ajax调用返回时间稍长,则在加载过程中,keypress无法进行另一次调用 该组件是一个使用数据加载程序的树。其设置如下所示: 树配置 .... root:{ nodeType:'async', text:'Accounts', expanded:false, uiProvider:false }, loader: { dataUrl:'dataurl',

因此,我遇到了一种情况,在击键后进行ajax调用(使用
缓冲区:150
)。如果(出于任何原因)ajax调用返回时间稍长,则在加载过程中,keypress无法进行另一次调用

该组件是一个使用数据加载程序的树。其设置如下所示:

树配置

....
root:{
    nodeType:'async',
    text:'Accounts',
    expanded:false,
    uiProvider:false
},
loader: {
    dataUrl:'dataurl',
    baseParams:{},
    loadexception:function(){
        console.log('Failed to load QUICKSEARCH');
    }
}
....
在文本字段上显示以下内容

文本字段侦听器

....
listeners:{
keyup:{buffer:150, fn:function(f, e) {
    if(Ext.EventObject.ESC == e.getKey()) {
        field.onTriggerClick();
    }else{
    var val = this.getRawValue();
            thisTree = this.ownerCt.ownerCt;
            thisTree.loader.baseParams.quicksearch_string = val;
            thisTree.root.reload();
    }
}}
}
....
理想情况下,我希望能够取消(或者完全取消,或者取消监听响应)呼叫并启动新的呼叫


因此,我想这里应该有一个问题……那么有没有一种方法可以取消侦听以前发出的ajax调用,或者设置强制执行新的调用呢

这是可能的,尽管记住这些调用不一定会以任何给定的顺序返回很重要,因此只有在返回顺序无关紧要时才可以使用这些调用。(尽管您可以解决这个问题,但它会变得复杂)

为了实现这一点(动态),您应该有一个使用一系列增量iFrame的函数,因此算法如下所示:

If(document.getElementById('iframe1').isDone()){ iframe1.src=newSrc }否则{ iframe2.src=newSrc }


它们都能够异步运行和返回。此功能也可以放入动态循环中,允许任意数量的异步iframe调用,但您必须使用google

尝试另一种重新加载树的方法。这里是我看到的另一种语法

thisTree.getLoader().load(thisTree.root);

AJAX不是异步Javascript和XML吗?问题不在于他们不会一起跑。我可以同时进行许多ajax调用。问题是在击键时im“重新加载”存储,但是“加载程序”在前一个调用返回之前不会触发下一个调用。我认为这是ExtJS组件的问题,而不是调用的同步性(这是一个词吗?)。ajax是异步的。但是谢谢你的回答,为什么不让ajax直接回调函数,而不是让侦听器呢?对不起,我不明白你在说什么。。。监听器在文本字段的击键上,因此在用户按下一个键之后,我希望加载程序更新(在缓冲期之后)