IE非常caching xhr requests。为了克服这个问题,用户建议在网址中添加一个随机数。例如here
虽然这可行,但我正在寻找一种全局添加随机数/全局禁用IE缓存的方法,并且还禁用资源xhr get调用的缓存。我猜我可以通过使用以下方法之一来实现这一目标。但我不确定我到底要做什么......
a)使用$httpProvider.defaults.transformRequest
b)使用request/response promise chaining
答案 0 :(得分:0)
这是IE的一个老问题。不确定如何使用Angular的$ httpProvider(或我想要的),但这里有一个函数可以向任何url添加一个随机值,无论它是否已经使用了查询字符串:
function noCacheUrl(url) {
var urlParser = document.createElement('a');
urlParser.href = url;
var q = "nc" + Math.random() + "=1";
q = urlParser.search ? urlParser.search + "&" + q : "?" + q;
return urlParser.protocol + "//" + urlParser.host + urlParser.pathname + urlParser.hash + q;
}
请注意,添加的查询参数的 名称 是随机的,而不是值,因此不太可能与任何现有的名称/值对发生冲突。示例:& nc0.8578296909108758 = 1
答案 1 :(得分:0)
我使用Django和自定义中间件向服务器上的响应添加no-cache标头解决了缓存问题。
class NeverCacheXhrMiddleware(object):
"""
sets no-cache headers for all xhr requests
xhr requests must send the HTTP_X_REQUESTED_WITH header to
be identified correctly as a xhr request using .is_ajax()
see: http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers
"""
def process_response(self, request, response):
if request.is_ajax():
response['Cache-Control'] = 'no-cache, no-store, must-revalidate'
response['Pragma'] = 'no-cache'
response['Expires'] = '0'
return response