Как обмануть jqXHR, чтобы разрешить использование локальных данных?

Это похоже на этот вопрос Заставьте jquery jqxhr действовать как уже отправка запроса , но это, похоже, не решает мою проблему.

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

С помощью ajaxSend я могу определить, когда отправляется запрос, поэтому в этот момент я знаю, какие из них я хочу остановиться и предоставить предварительно вычисленный ответ, но не могу найти способ сделать это. Одной из возможных альтернатив глубокого уровня было бы игнорировать jQuery и использовать Service Worker, но это ограничило бы браузеры, в которых это будет работать, и это может также означать дополнительную сложность логики о предварительно вычисленных ответах, поэтому я хотел бы остаться с jQuery-решение.

Для начала я был бы рад сделать первый шаг, просто остановив запрос, касающийся сети, но, хотя я пытался остановить событие, xhr всегда выполняется.

    $( document ).ajaxSend(function(event, request, settings) {
        console.log(request)
        event.preventDefault()
        event.stopPropagation()
        return false;
    }

Затем следующим шагом (или может быть этим) является использование объекта запроса для разрешения промиса, но у него нет метода «разрешения», поэтому я предполагаю, что это ограниченное обещание

Может ли кто-нибудь помочь мне найти решение?


person AlfonsoML    schedule 05.05.2016    source источник
comment
Я думаю, вам нужно будет украсить (переписать) $.ajax себя.   -  person Bergi    schedule 06.05.2016


Ответы (1)


Я сделал что-то подобное некоторое время назад, переопределив $.ajax.

(function ($) {
    var jqAjax = $.ajax;
    $.ajax = function (settings) {
        if(someCriteriaToDetermineIfItsLocalOrNot) {
           // get from local storage, and return a promise or something
        } else
            return jqAjax(settings);
    };
} (jQuery));
person David784    schedule 05.05.2016