2016-05-05 12 views
1

Das ist dieser Frage ähnlich Make jquery jqxhr act like already sending request, aber das scheint mein Problem nicht zu lösen.Wie trickst du einen jqXHR, um lokale Daten zu verarbeiten?

Ich benutze ein Framework, wo viele Anfragen mit jQuery ajax Methoden gemacht werden, und ich muss in der Mitte davon einhaken (aber ohne den ursprünglichen Code zu berühren), um einige Antworten vom Server zu emulieren.

Mit ajaxSend kann ich erkennen, wann immer eine Anfrage gesendet wird, also an dem Punkt weiß ich, welche ich stoppen möchte und meine vorberechnete Antwort, aber ich kann keinen Weg finden, es zu tun. Eine mögliche tiefgreifende Alternative wäre es, jQuery zu ignorieren und einen Service Worker zu wählen, aber das würde die Browser einschränken, wo dies funktioniert, und es kann auch eine zusätzliche Komplexität für die Logik der vorberechneten Antworten bedeuten, also würde ich gerne mit einem bleiben jQuery Lösung.

Für den Anfang wäre ich glücklich, einen ersten Schritt zu haben, nur in der Lage zu stoppen die Anfrage aus dem Netzwerk zu berühren, aber obwohl ich versucht, das Ereignis zu stoppen, wird die xhr immer ausgeführt.

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

Dann ist der nächste Schritt (oder kann es diese) wird mit dem Request-Objekt, das Versprechen zu lösen, aber es ist kein ‚Entschlossenheit‘ Methode haben, also denke ich, dass es ein restricted Promise

Kann mir jemand helfen, eine Lösung zu finden?

+0

Ich denke, Sie müssen $ $ .ajax selbst schmücken (überschreiben). – Bergi

Antwort

0

Ich habe etwas ähnliches zu diesem eine Weile durch Überschreiben $.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)); 
Verwandte Themen