2013-05-29 2 views
3

У меня есть приложение, использующее 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 конкретные решения было бы слишком хорошо)

+2

Для позвоночника в частности, вы бы переопределить 'Backbone.sync'. Для jQuery вы уже поняли это. Чтобы обойти оба и обработать 'XMLHttpRequest' напрямую ... Что вам нужно сделать для этого угона? Просто зарегистрировать? Или изменить материал? –

+0

Больше, чем просто журнал. Не обязательно вносить изменения в исходный запрос (хотя это может быть вариант), это более эффективные действия до и после запроса. – neolaser

+0

Почему вы не можете использовать 'jQuery' или' Backbone' для создания своего запроса, а не для создания 'XMLHttpRequest' напрямую? Все, что вы могли бы сделать, чтобы изменить это поведение напрямую (с помощью переопределения прототипов), скорее всего, окажется уродливым взломом для любого, кто видит код (лично я считаю, что вышеупомянутый метод «действительноОтправить» - это взлом). Возможно, вы могли бы обернуть 'XMLHttpRequest' в локально определенный' CustomXMLHttpRequest', если вы действительно не можете использовать 'jQuery'? –

ответ

0

Вам нужно сделать что-то вроде этого.

CoffeeScript Код

define [ 
    'jquery' 
], ($) -> 
    loadElement = $('someContent') 

    $(document) 
     .ajaxStart(-> $(loadElement).show()) 
     .ajaxStop(-> $(loadElement).hide()) 
Смежные вопросы