У меня есть приложение, использующее Backbone.js, которое имеет различные запросы AJAX. Я хочу иметь возможность перехватывать все запросы AJAX и выполнять некоторые предварительные и пост-запросы без необходимости указывать эти функции в точке определения.Backbone.js перехватывает запросы AJAX
Пример того, что я хочу сделать, - если ответ от запроса указывает, что пользователь не вошел в систему, отображается полноэкранный модальный код.
Я смотрел делать что-то вроде следующего с помощью JQuery:
jQuery.ajaxSetup({
beforeSend: function() {
return console.log("mybefore");
}
});
, но это, кажется, пропустить запросы XHR с помощью сокетов.
Я также кратко посмотрел на делать что-то вроде следующего:
XMLHttpRequest.prototype.reallySend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(body) {
console.log('mybefore');
this.reallySend(body);
};
В этом примере, я не был уверен, как сделать after
Итак, после всего этого, мой вопрос: Есть ли элегантный способ переопределения функций ajax для предварительной и последующей обработки без изменения способа получения запросов.
(Любые Backbone.js конкретные решения было бы слишком хорошо)
Для позвоночника в частности, вы бы переопределить 'Backbone.sync'. Для jQuery вы уже поняли это. Чтобы обойти оба и обработать 'XMLHttpRequest' напрямую ... Что вам нужно сделать для этого угона? Просто зарегистрировать? Или изменить материал? –
Больше, чем просто журнал. Не обязательно вносить изменения в исходный запрос (хотя это может быть вариант), это более эффективные действия до и после запроса. – neolaser
Почему вы не можете использовать 'jQuery' или' Backbone' для создания своего запроса, а не для создания 'XMLHttpRequest' напрямую? Все, что вы могли бы сделать, чтобы изменить это поведение напрямую (с помощью переопределения прототипов), скорее всего, окажется уродливым взломом для любого, кто видит код (лично я считаю, что вышеупомянутый метод «действительноОтправить» - это взлом). Возможно, вы могли бы обернуть 'XMLHttpRequest' в локально определенный' CustomXMLHttpRequest', если вы действительно не можете использовать 'jQuery'? –