2016-05-05 3 views
1

Это похоже на этот вопрос Make jquery jqxhr act like already sending request, но это, похоже, не решает мою проблему.Как обмануть jqXHR для разрешения с использованием локальных данных?

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

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

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

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

Тогда следующий шаг (или может это это один) использует объект запроса разрешить обещание, но это не метод «Определять», так что я думаю, что это restricted Promise

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

+0

Я думаю, вам нужно украсить (переписать) '$ .ajax'. – Bergi

ответ

0

Я сделал что-то похожее на это некоторое время назад, переопределив $.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));