1

我正在面临一个特殊的问题和缓存。我使用的镀铬目前 我已经angularjs服务如下Chrome缓存重写angularjs禁用缓存

var url = '/api/acts/' + accountId + '/policy/?filter=NEW_POLICY'; 
       return $http({ 
        method : 'GET', 
        url : url, 
        cache : false, 
        headers: {'disableErrorRedirect': true,'Cache-Control' : 'no-cache'} 
       }); 

这里我设置为不使用缓存,并始终刷新调用的所有属性。但我已经看到,5次中有3次是选择相同的价值。 过一段时间后,它会自动刷新。服务器端没有缓存问题,因为我没有缓存它。在Chrome开发工具中,有一个选项叫做“禁用缓存”,当我检查它时,结果永远不会被缓存,我会得到最新的结果。 我想确保始终保留已刷新的数据,尽管Chrome上有任何设置仍应返回。 我真的很困惑如何处理这个问题。如上所述,我写了所有的angularjs和http代码以避免缓存。 任何帮助,将不胜感激。

回答

3

我有这个相同的问题,并通过全局声明缓存配置来解决它。这并不理想,但比添加随机字符串更好。

angular.module('app', []) 
    .config(function ($httpProvider) { 
    $httpProvider.defaults.headers.common['Cache-Control'] = 'no-cache'; 
    $httpProvider.defaults.cache = false; 
    }); 
0

你试图得到什么文件?在url结尾处有/policy/?filter=NEW_POLICY,但在问号前和斜杠后没有实际的文件名。但无论如何...

您始终可以忽略缓存版本并通过使用/baseroot/id/postroot/file?random_string从服务器获取。所以例如:

var rand_num = Math.random(); 
var url = '/api/acts/' + accountId + '/policy/filename?v=' + rand_num + '&filter=NEW_POLICY' 

或只是var url = '/api/acts/' + accountId + '/policy/?v=' + rand_num + '&filter=NEW_POLICY'我想。就像我说的,我不知道在URL路径末尾没有文件名的情况。

不完全确定这是否是您的案例中url的有效查询字符串,但您可以尝试查看它是否有效。

+0

嗨,感谢您的回复..当然,我已经想过这种方法追加一个随机值,但这是我最后的选择。你的解决方案是有效的,但我想得到一些角度特定的解决方案,不管浏览器设置如何,都不允许缓存。 –

+0

好的。我没有意识到一个特定角度的方法来做到这一点(我只是直到查看角度http对象有一个操纵缓存的方法才知道)。尽管如果你想尝试添加头文件列表,你可以试试'pragma'头文件?不知道如果在所有有用的,但我发现它使用[这里](http://stackoverflow.com/questions/16098430/angular-ie-caching-issue-for-http) –

+0

愚蠢的迷你降价... –