EXT Js Синхронный AJAX-запрос - PullRequest
13 голосов
/ 04 июня 2011

Как я могу сделать синхронные запросы AJAX в EXT JS?

Например, с помощью этого кода:

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

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

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

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

Ответы [ 3 ]

27 голосов
/ 06 января 2013

Мне нужно было что-то похожее, и после просмотра исходного кода 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 не задокументирован, поэтому ... конечно ... имейте в виду, что он может измениться в будущих выпусках.

11 голосов
/ 04 июня 2011

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

4 голосов
/ 04 июня 2011

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

Вам может пригодиться обсуждение после .

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