EXT Js Синхронный запрос ajax

Как сделать синхронные запросы ajax в EXT JS?

Например, данный код:

test1();
ajaxRequest(); //Ajax Request
test2();

Функция test2 выполняется, даже не заканчивая выполнение ajaxRequest(), которая имеет вызов Ext.Ajax.request.

Как сделать text2() выполнение только после выполнения функции ajaxRequest()?

Я понимаю, что одним из способов сделать это является вызов функции test2 в обратном вызове, но у меня есть некоторые зависимости и много кода, которые должны выполняться после запроса ajax синхронно. Не могли бы вы помочь мне с лучшим решением?

Ответы

Ответ 1

Мне нужно было что-то подобное, и, посмотрев исходный код Ext.Ajax.request() и Ext.data.Connection, я обнаружил, что они проверяют атрибут async по методу request(), поэтому на самом деле можно сделать синхронный запрос, например:

var response = Ext.Ajax.request({
    async: false,
    url: 'service/url'
});
var items = Ext.decode(response.responseText);

Кажется, что этот атрибут async не документирован, поэтому... конечно... помните, что он может измениться в будущих выпусках.

Ответ 2

В Extjs.Ajax каждый вызов AJAX приводит к одному из трех типов функций обратного вызова:

  • success, который запускается, если вызов AJAX успешно создан и получает ответ
  • failure, который запускается, если вызов AJAX не получает ответ
  • callback, который запускается ПОСЛЕ того, как вызов AJAX получает ответ

Если вы хотите выполнить test2(); после завершения вашего запроса ajax,
затем поставьте функцию test2 внутри функции success, failure или callback; какой бы вы ни выбрали, зависит от вас...

Более подробную информацию о функции success или failure можно найти здесь.

test1();
Ext.Ajax.request({
    url: 'page.php',
    params: {
        id: 1
    },
    // scope: this, // you can set the scope too
    callback: function(opt,success,respon){
        test2();
    } 
});

Примечание. Этот метод не работает с ExtJS 3.

Ответ 3

ExtJS не предоставляет возможности синхронного запроса из коробки. Фактически, они сильно препятствуют их использованию.

Вы можете найти следующие обсуждения.