Здравствуйте.
Есть ли встроенная возможность отследить какие аякс-запросы активны в настоящий момент, и прервать выполнение конкретного запроса, или всех запросов?
Здравствуйте! Нет, такой функциональности нет.
Однако, любые Ajax запросы на странице можно отследить с помощью глобального события, onBeforeAjax и, при необходимости, создать массив всех запросов и следить за их состоянием, readyState
.
var xhr = [];
webix.attachEvent("onBeforeAjax", function(mode, url, data, request,headers){
xhr.push(request);
});
Другая возможность - это получение запроса с помощью метода getXHR(), если запрос отправлен через webix.ajax()
.
Ясно, спасибо.
Вернулся к этому вопросу и возник новый, а я как-то могу глобально же отслеживать завершение выполнения запроса? Причём вне зависимости - успешно или нет.
То есть сначала в массив сохранил запросы, а потом, по мере выполнения - чищу массив от выполненных запросов.
В коде, рядом с “onBeforeAjax” никаких событий не нашёл.
Дальше поискал, нашёл
this.callEvent("onAfterLoad",[]);
this.callEvent("onLoadError",arguments);
webix.callEvent("onLoadError", [text, xml, xhttp, this]);
Но события на “this.”, я так понимаю, вызываются на конкретном вызове. А глобальное здесь только с ошибкой. И в любом случае, событие постобработки запроса - не содержит в себе идентификатора созданного объекта подключения, или его самого, так что без изменения всех вызовов AJAX в проекте, я в таком случае, не могу организовать глобальный учёт этих обращений.
Подскажите, пожалуйста, как это всё-таки реализовать. Сейчас у меня это на jQuery:
$.xhrPool = [];
$.xhrPool.abortAll = function xhrPool_abortAll()
{
$(this).each(function (i, jqXHR)
{ // cycle through list of recorded connection
jqXHR.abort(); // aborts connection
$.xhrPool.splice(i, 1); // removes from list by index
});
}
$.ajaxSetup({
beforeSend: function ajax_beforeSend(jqXHR, settings)
{
if ($.xhrPool.indicator == "") return;
$("#" + $.xhrPool.indicator).show()
$.xhrPool.push(jqXHR);
}, // annd connection to list
complete: ajax_complete,
error: ajax_complete
});
function ajax_complete(jqXHR)
{
if ($.xhrPool.indicator == "") return;
var i = $.xhrPool.indexOf(jqXHR); // get index for current connection completed
if (i > -1)
{
$.xhrPool.splice(i, 1);// removes from list by index
}
if ($.xhrPool.length == 0)
{
$("#" + $.xhrPool.indicator).hide();
}
}
7ой параметр oBeforeAjax события - это промис серверного ответа
webix.attachEvent("onBeforeAjax", function(mode, url, params, xhr,
headers, file, promise){
promise.then(function(){
alert("all fine");
}, function(){
alert("something is wrong");
});
});
Замечательно!
Спасибо. К сожалению в документации я про это не нашёл. И исходники мне тоже такую конструкцию не подсказали.
Буду использовать, спасибо!