我可以使用 IO管道主题拦截Dojo 1.6.1 xhr请求,如下所述:
我想在URL(fe &time=12345
)中添加一个时间参数,以防止来自dojox.data.JsonRestStore
的某些(或所有)xhr GET请求中的缓存(我正在尝试的详细信息)达到here)。我的代码如下所示:
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
而不做任何其他事情,但这没有效果。
答案 0 :(得分: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
答案 1 :(得分: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网址完全符合我的要求。它似乎也添加了缓存控制标头。