2016-05-05 13 views
1

これはこの質問Make jquery jqxhr act like already sending requestに似ていますが、それは私の問題を解決するようではありません。jqXHRをトリックしてローカルデータを使用して解決するにはどうすればよいですか?

私は、jQueryのajaxメソッドを使って多くのリクエストが行われているフレームワークを使用していますが、その途中で(元のコードに触れずに)フックしてサーバーからの応答をエミュレートする必要があります。

ajaxSendリクエストが送信されているときはいつでも検出できます。その時点で、私は停止したいプレミアムを知り、事前計算済みの応答を提供していますが、その方法を見つけることができません。可能な深いレベルの代替案の1つは、jQueryを無視してService Workerに行くことですが、これはブラウザが動作する場所を制限し、事前計算された応答について論理に複雑さを追加することを意味する可能性があります。 jQueryソリューション。

まずは、ネットワークに触れないようにリクエストを停止するだけで最初のステップができてうれしいですが、イベントを停止しようとしましたが、xhrは常に実行されます。

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

次のステップ(または、それはこの1つだかもしれないが)約束を解決するためのrequestオブジェクトを使用しているが、それは「決意」メソッドを持っていないので、私はそれが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)); 
関連する問題