簡體   English   中英

阻止頁面上每個Dojo xhr請求中的緩存

[英]Prevent cache in every Dojo xhr request on page

我能夠使用IO管道主題來攔截Dojo 1.6.1 xhr請求,如下所述:

Dojo-攔截XHR呼叫

我想在URL(fe &time=12345 )中添加一個時間參數,以防止在源自dojox.data.JsonRestStore某些(或全部)xhr GET請求中進行緩存(有關詳細信息,請參見此處 )。 我的代碼如下所示:

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 ,什么也不做,但這沒有任何效果。

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

答案再次來自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

嘗試了一下,並通過向xhr URL添加&dojo.preventCache=1359366392301參數來實現我想要的功能。 而且似乎也添加了一個緩存控制標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM