我有以下代码,它在Mozilla,Chrome上运行得很好,但在Microsoft Edge或Internet Explorer上却没有。这是发生的事情。
当用户加载网页时,我会触发以下代码:
$http.get("/api/items")
.then(function (response) {
angular.copy(response.data, $scope.items);
}, function (error) {
$scope.errorMessage = error.statusText;
})
.finally(function () {
$scope.isBusy = false;
});
将所有值拉入<ul>
。此部分适用于所有浏览器。但是,当我触发以下内容时:
$scope.interval = $interval(function () {
$http.get("/api/items")
.then(function (response) {
//success
//loop through the response
angular.forEach(response.data, function (value, key) { ... more code here}
然后突然响应不再来自我的网络API。我的意思是,当我调试我的应用程序并在我的GET api中放置断点(我的意思是在我的MVC控制器中的Visual Studio中)时,我看不到从Microsoft Edge触发的调用调用。
以下是Chrome浏览器的外观:
这个来自Edge:
据我了解,Edge只对我的GET进行了一次真正的XHR调用,其余所有调用只是从内存中缓存出来的?
如何解决这个问题?为什么会发生这种情况?
答案 0 :(得分:0)
最后我发现,问题在于Angular存储Cache。可以使用两个选项(取自其他StackOverflow帖子):
1)角度方法(由于未知原因对我不起作用):
myModule.config(['$httpProvider', function($httpProvider) {
//initialize get if not there
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
// Answer edited to include suggestions from comments
// because previous version of code introduced browser-related errors
//disable IE ajax request caching
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
// extra
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);
2)ASP.NET装饰GET方法的方法:
[ResponseCache(NoStore = true, Duration = 0)]