当前位置: 首页 > 知识库问答 >
问题:

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

孙玮
2023-03-14

我正在学习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 = $html" target="_blank">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控制台是否有警告或错误,但没有。

编辑:正如选择的答案所表明的,这是一个缓存问题。我已经让服务器向响应添加了一个值为“no cache”的“cache control”头。这就解决了问题。

共有2个答案

阮桐
2023-03-14

为了防止任何缓存,我更喜欢使用$http.post。

花稳
2023-03-14

请求可能被缓存,因为缓存GET请求是有效的。FF和Chrome可能由于运行开发工具或其他原因而禁用了缓存。您可以将时间戳附加为url查询字符串“processdata?”(新日期()).getTime(),以查看是否存在缓存问题。

防止IE缓存的更漂亮的方法可以在这里找到:$http的角度IE缓存问题

 类似资料:
  • 问题内容: 我正在为教练创建一个网站,以通过使用社交媒体帮助人们拥有更健康的生活。目前,我正在通过ExpressJS服务器中的OAuth(前端为AngularJS)访问Twitter。 从AngularJS网站: 在200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。请注意,如果响应是重定向,则XMLHttpRequest将透明地跟随它,这意味着不会为此类响应调用错误回调。 我的

  • 我的问题是,尽管我在SVG中添加了“display:inline”,但是IE11中带有文本的a-tag中的SVG仍然会进入下一行。 在a-tag上添加“display:flex”也不能正常工作--只是奇怪地破坏了文本 HTML:

  • 问题内容: 我正在尝试使用jaxb- maven插件使用JAXB将多个XSD转换为不同包中的POJO。我已将其设置为使用多个执行块,然后执行第一个执行块,然后出现一条消息:模式或绑定文件中未检测到更改 这是我pom.xml的摘录: 这是我收到的错误消息: 如果我交换执行块,则第一个总是执行,其余两个块得到相同的消息。 关于如何解决这个问题的任何想法? 问题答案: 通过升级到版本1.6进行了修复 和

  • 问题3:如果我使用@Schedured(initaildelay=10000,fixedrate=20000)而不是@PostConstruct注释,它将解决第一个问题,但是它将每20秒执行一次我的作业。 有线索吗?

  • 这是我的减速器。Reducer具有可边写和可空写功能 EdgeWritable有4个整数,例如<71,74,7,2000>通信在71(FromID)到74(ToID)on 7(7月)2000(Year)之间。 映射器输出10787条记录到reducer,但reducer只输出1条。 我需要输出44个文件与44个月之间的时期从1998年10月至2002年7月。输出的格式应该是“out”+month+