0

ここで説明されているように、IO パイプライン トピックを使用して Dojo 1.6.1 xhr リクエストをインターセプトできます。

Dojo - XHR 呼び出しのインターセプト

URL (fe &time=12345) に時間パラメータを追加して、特定の (またはすべての) xhr GET リクエストのキャッシュを防止したいと思います (dojox.data.JsonRestStore私が達成しようとしていることの詳細はこちら)。私のコードは次のようになります。

dojo.subscribe("/dojo/io/send", function(deferred) {

    if (deferred.ioArgs.url.indexOf("restService1") > -1) {
        deferred.cancel();
        deferred.ioArgs.url += '&time=12345' // test value at this point
        dojo.xhrGet(deferrred.ioArgs);
    }
});

基本的に、リクエストをキャンセルし、URL に文字列を追加してから、変更された URL でリクエストを作成しようとしています。

これはまったく機能しません。URL が変更されたリクエストはサーバーに到達せず、ブラウザ コンソールに次のようなエラーが多数表示されます。

Chrome エラー

エラーは dojo.js の 14 行目で発生します。これらのエラーの後、Chrome タブは最終的にクラッシュします。

deferred.ioArgs.urlまた、変更して他に何もしないことも試みましたが、効果はありません。

4

2 に答える 2

2

と の両方dojo/io/scriptdojo/xhrは、preventCacheまさにあなたがしようとしていることを行うパラメーターがあります。preventCache: trueでは、インターセプトを試みる代わりに、リクエスト引数に追加することはできますか?

http://dojotoolkit.org/reference-guide/1.6/dojo/io/script.html#dojo-io-script

http://dojotoolkit.org/reference-guide/1.6/dojo/xhrGet.html#dojo-xhrget

于 2013-01-25T21:09:34.037 に答える
2

答えはSven Hasselbachから再び来ます:

/**
 * Cache Prevention for Dojo xhr requests
 *
 * Adds no-cache header and enables dojo's preventCache feature
 * for every dojo xhr call. This prevents the caching of partial
 * refreshs.
 *
 * @author Sven Hasselbach
 * @version 0.3
 *
 **/
dojo.addOnLoad(
    function(){
        if( !dojo._xhr )
        dojo._xhr = dojo.xhr;

        dojo.xhr = function(){        
            try{
                var args = arguments[1];   
                args["preventCache"] = true;
                args["headers"] = { "cache-control": "no-cache" };
                arguments[1] = args;
          }catch(e){}

          dojo._xhr( arguments[0], arguments[1], arguments[2] );
        }
    }
)

http://openntf.org/XSnippets.nsf/snippet.xsp?id=cache-prevention-for-dojo-xhr-requests

&dojo.preventCache=1359366392301試してみたところ、xhr URL にパラメーターを追加することで、まさに私が探していたものを実行できます。また、キャッシュ制御ヘッダーも追加されているようです。

于 2013-01-28T09:57:36.870 に答える