ExtJS: вызов ajax при нажатии клавиш не работает, пока существует другой вызов - PullRequest
3 голосов
/ 11 апреля 2011

Итак, у меня есть ситуация, когда после нажатия клавиши выполняется вызов 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');
    }
}
....

со следующим в текстовом поле

слушатель текстового поля

....
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 ]

1 голос
/ 11 мая 2011

Попробуйте альтернативный способ перезагрузки дерева. Вот еще один синтаксис, который я видел.

thisTree.getLoader().load(thisTree.root);
0 голосов
/ 14 апреля 2011

Здесь вы ищете асинхронные вызовы ajax.

Это возможно, хотя важно помнить, что эти вызовы не обязательно будут возвращаться в любом заданном порядке, поэтому их можно использовать только тогда, когда порядок возврата не имеет значения. (Хотя вы можете обойти это, это будет сложно).

Чтобы выполнить это (динамически), у вас должна быть функция, которая использует серию инкрементных фреймов, и поэтому алгоритм следующий:

Если (document.getElementById ( 'iframe1'). IsDone ()) { iframe1.src = newSrc } Еще { iframe2.src = newSrc }

Они ОБА смогут работать и возвращаться асинхронно. Эту функциональность также можно поместить в динамический цикл, допускающий любое количество асинхронных вызовов iframe, но для этого вам придется использовать Google!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...