簡體   English   中英

Angularjs'$ http.get只在IE11中執行一次

[英]Angularjs' $http.get only executed once in IE11

我正在學習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控制台是否有警告或錯誤,但沒有。

編輯:正如所選答案所示,這是一個緩存問題。 我讓服務器為響應添加了一個'cache-control'標頭,其值為'no-cache'。 這解決了這個問題。

請求可能會被緩存,因為它對緩存GET請求有效。 由於運行開發工具或其他原因,FF和Chrome可能已禁用緩存。 你可以附加一個時間戳作為url查詢字符串"processdata?" + (new Date()).getTime() "processdata?" + (new Date()).getTime()以查看它是否是緩存問題。

可以在這里找到更好的防止IE緩存的方法: $ http的Angular IE Caching問題

我更喜歡使用$ http.post來防止任何緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM