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