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 的请求不会最终到达服务器,并且我在浏览器控制台中收到很多这些错误:

铬错误

错误发生在 dojo.js 的第 14 行。在这些错误之后,Chrome 选项卡最终会崩溃。

我也试过只是修改deferred.ioArgs.url并且什么都不做,但这没有任何效果。

4

2 回答 2

2

两者dojo/io/script都有dojo/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=1359366392301xhr URL 添加参数完全符合我的要求。它似乎也添加了一个缓存控制标头。

于 2013-01-28T09:57:36.870 回答