我正在学习angularjs,作为一个测试项目,我正在轮询一个服务器,该服务器返回一个活动进程列表(它们的pid)并显示这些进程。
客户端代码如下所示:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="static/angular/angular.js"></script>
<script>
function ProcessCtrl($scope, $http, $interval) {
$scope.ReloadData = function() {
var result = $http.get("processdata", {timeout:1000});
result.success(function(data,status,headers,config) {
$scope.processes = data;
});
}
$scope.ReloadData();
var stop = $interval(function(){$scope.ReloadData()}, 1000);
}
</script>
</head>
<body ng-app>
<div ng-controller="ProcessCtrl">
Processes:
<ul>
<li ng-repeat="process in processes">
{{process.pid}} is running
</li>
</ul>
</div>
</body>
</html>
这适用于Firefox和Chrome,但不适用于Internet Explorer 11。
所有浏览器每秒都执行一次ReloadData方法,但IE11实际上并没有从服务器获取进程数据。 Firefox和Chrome确实每秒都会获取数据。我也可以在我的服务器的输出中看到这一点,该服务器记录每个请求。
所有三个浏览器都执行result.success
中的代码,但IE11不断重复使用它第一次获得的旧数据,其中FireFox和Chrome使用新获取的数据。
我已经在IE11中检查了Web控制台是否有警告或错误,但没有。
修改 正如所选答案所暗示的那样,这是一个缓存问题。我让服务器添加了一个&#39;缓存控制&#39;使用值&#39; no-cache&#39;来标记响应。这解决了这个问题。
答案 0 :(得分:8)
请求可能会被缓存,因为它对缓存GET请求有效。由于运行开发工具或其他原因,FF和Chrome可能已禁用缓存。您可以将时间戳附加为url查询字符串"processdata?" + (new Date()).getTime()
,以查看它是否是缓存问题。
可以在此处找到更好的防止IE缓存的方法: Angular IE Caching issue for $http
答案 1 :(得分:0)
我更喜欢使用$ http.post来阻止任何缓存。