[英]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.