我正在学习 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 控制台是否有警告或错误,但没有。
Edit:正如所选答案所暗示的那样,这是一个缓存问题。我已经让服务器在响应中添加了一个“cache-control”标头,其值为“no-cache”。这已经解决了问题。