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

标签 javascript angularjs internet-explorer-11

我正在学习 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/

相关文章:

javascript - 使用jsreport在一个页面上多次渲染相同的模板

angularjs - Angular ui bootstrap Accordion "only open one at a time"不起作用

javascript - 从一个范围中删除数据,它反射(reflect)在另一个范围上

javascript - 向 IIFE 添加第三个函数

javascript - WebRTC 上音频无法工作,但视频可以工作

c# - 为什么 IE11 会在 Fiddler 运行时创建空白的发布请求?

java - WebDriver 测试未在 IE11 上运行

HTML5/CSS3 - IE11 显示 navbar li 与 chrome 和 firefox 不同

javascript - 主干集合获取选项不影响 GET 请求

javascript - ES7 async/await 概念问题