gpt4 book ai didi

javascript - Angularjs 的 $http.get 在 IE11 中只执行一次

转载 作者:数据小太阳 更新时间:2023-10-29 06:02:04 26 4
gpt4 key购买 nike

我正在学习 angularjs,作为一个测试项目,我正在轮询一个服务器,该服务器返回一个事件进程列表(它们的 pids)并显示这些。

客户端代码如下所示:

<!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 控制台是否有警告或错误,但没有。

编辑:正如所选择的答案所暗示的那样,这是一个缓存问题。我让服务器在响应中添加了一个“缓存控制” header ,值为“无缓存”。这样就解决了问题。

最佳答案

有可能请求被缓存了,因为缓存 GET 请求是有效的。由于运行开发工具或其他原因,FF 和 Chrome 可能已禁用缓存。您可以附加一个时间戳作为 url 查询字符串 "processdata?"+ (new Date()).getTime() 看看是不是缓存问题

可以在此处找到防止 IE 缓存的更漂亮的方法: Angular IE Caching issue for $http

关于javascript - Angularjs 的 $http.get 在 IE11 中只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com