如何在IE中禁用Angular中的AJAX请求缓存

时间:2015-09-30 19:09:42

标签: angularjs http internet-explorer

我有一个角度应用程序,它对服务器进行HTTP GET调用。它适用于Chrome& Firefox浏览器。但是,我发现IE缓存了GET响应,在我执行POST后,我需要调用相同的GET请求并获取新的更新响应,但IE会缓存它。我想禁用IE的缓存。 我尝试使用

'If-None-Match': '*'

我的GET调用请求标头,但随后禁用所有内容的缓存。有没有办法只为IE有条件地做这件事?或者还有其他方法可以禁用它吗?

4 个答案:

答案 0 :(得分:4)

HTML

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">

OR

JS

if (!$httpProvider.defaults.headers.get) {
        $httpProvider.defaults.headers.common = {};
}
$httpProvider.defaults.headers.common["Cache-Control"] = "no-cache";
$httpProvider.defaults.headers.common.Pragma = "no-cache";
$httpProvider.defaults.headers.common["If-Modified-Since"] = "0";

答案 1 :(得分:2)

使用上述信息,我能够在控制器内部进行一次性请求,而不是更改全局默认值:

var configOptions = {
    headers: {
        common: {
            "Cache-Control": "no-cache",
            "If-Modified-Since": "0",
            "Pragma": "no-cache"
        }
    }
};

$http.get("path/to/file.json", configOptions)
    .then(function (response){
        //do stuff
    });

答案 2 :(得分:1)

IE中的

$ http。没有响应代码200或304.它只使用本地缓存。

尝试将标头添加到$ httpProvider。

angular.module(ApplicationConfiguration.applicationModuleName)
.config(['$httpProvider', function($httpProvider) {
    //initialize get if not there
    if (!$httpProvider.defaults.headers.get) {
        $httpProvider.defaults.headers.get = {};    
    }    

    //disable IE ajax request caching
    $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';

    $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
    $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);

答案 3 :(得分:0)

我知道这是一个旧线程。 只是说我刚刚对其进行了测试,而IE11并未观察到任何可讨论的标头。

由于IE仅负责确定url是否被缓存,因此我只是在查询字符串中添加了一个日期,例如:

$http.get("https://myURLWithoutParameters"?t=" + new Date().getTime())
.then(function (response) {
  // Handle response
}, function (response) {
  // Error handling
});