所有从IE发送的ajax调用都被Angular缓存了,我对所有后续调用都得到了一个304响应。虽然请求是一样的,但在我的情况下,响应是不一样的。我想禁用这个缓存。我尝试将缓存属性添加到$http。得到了,但还是没有用。如何解决这个问题?
当前回答
我得到它解决附加datetime作为一个随机数:
$http.get("/your_url?rnd="+new Date().getTime()).success(function(data, status, headers, config) {
console.log('your get response is new!!!');
});
其他回答
一种选择是使用简单的方法,为每个请求添加时间戳,不需要清除缓存。
let c=new Date().getTime();
$http.get('url?d='+c)
只有这一行对我有帮助(Angular 1.4.8):
$httpProvider.defaults.headers.common['Pragma'] = 'no-cache';
UPD:问题是IE11进行了主动缓存。当我在研究Fiddler时,我注意到在F12模式下请求发送“Pragma=no-cache”,每次访问页面时都请求endpoint。但是在正常模式下,当我第一次访问页面时,端点只被请求了一次。
你可以添加一个唯一的querystring(我相信这就是jQuery对cache: false选项所做的)到请求。
$http({
url: '...',
params: { 'foobar': new Date().getTime() }
})
一个可能更好的解决方案是,如果您可以访问服务器,那么您可以确保设置必要的头文件以防止缓存。如果你使用ASP。这个答案可能会有帮助。
上面的解决方案是可行的(通过在查询字符串中添加一个新的参数使url唯一),但我更喜欢解决方案建议[这里]:更好的方法防止IE缓存在AngularJS?,它在服务器级处理这个问题,因为它不是特定于IE。我的意思是,如果资源不应该被缓存,那就在服务器上做(这与使用的浏览器无关;这是资源的固有属性)。
例如,在使用JAX-RS的java中,以编程方式为JAX-RS v1或以声明方式为JAX-RS v2执行此操作。
我相信任何人都能弄清楚怎么做
为了避免缓存,一种方法是为相同的资源或数据提供不同的URL。为了生成不同的URL,您可以在URL的末尾添加一个随机查询字符串。该技术适用于JQuery、Angular或其他类型的ajax请求。
myURL = myURL +"?random="+new Date().getTime();
推荐文章
- 如何使用jQuery检测页面的滚动位置
- if(key in object)或者if(object. hasownproperty (key)
- 一元加/数字(x)和parseFloat(x)之间的区别是什么?
- angularjs中的compile函数和link函数有什么区别
- 删除绑定中添加的事件监听器
- 很好的初学者教程socket.io?
- HtmlSpecialChars在JavaScript中等价于什么?
- React: 'Redirect'没有从' React -router-dom'中导出
- 如何在React中使用钩子强制组件重新渲染?
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法
- 如何以及为什么'a'['toUpperCase']()在JavaScript工作?
- 有Grunt生成index.html不同的设置