ExtJS:当另一个呼叫存在时,按键调用时ajax调用不起作用

时间:2011-04-11 05:50:16

标签: javascript ajax extjs

所以我遇到一种情况,即在击键后进行了ajax调用(使用buffer:150)。如果(无论出于何种原因)ajax调用稍微有点滞后返回,那么在该加载过程中的按键无法再次调用。

组件是使用加载器获取数据的树。设置如下:

树状配置

....
root:{
    nodeType:'async',
    text:'Accounts',
    expanded:false,
    uiProvider:false
},
loader: {
    dataUrl:'dataurl',
    baseParams:{},
    loadexception:function(){
        console.log('Failed to load QUICKSEARCH');
    }
}
....

在文本字段中包含以下内容

textfield listener

....
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调用或强制更新调用的设置

2 个答案:

答案 0 :(得分:1)

尝试另一种重新加载树的方法。这是我见过的另一种语法。

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

答案 1 :(得分:0)

这里你要寻找的是异步ajax调用。

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

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

如果(的document.getElementById( 'iframe1')。isDone()){    iframe1.src = newSrc }其他{   iframe2.src = newSrc }

这些将能够以异步方式运行和返回。此功能也可以放入动态循环中,允许任意数量的异步iframe调用,但您必须使用谷歌!