2014-02-05 14 views
5

Ich lerne angularjs, und als Testprojekt ich einen Server abfragen, der eine Liste der aktiven Prozesse (ihre pids) zurückgibt und diese anzeigen.

Der Client-Code sieht wie folgt aus:

<!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> 

Das in Firefox und Chrome funktioniert, aber nicht ganz in Internet Explorer 11.

Alle Browser ausführen, um die Methode Reload jede Sekunde, aber IE11 doesn‘ t tatsächlich die Prozessdaten vom Server holen. Firefox und Chrome holen die Daten jede Sekunde. Ich kann dies auch in der Ausgabe von meinem Server sehen, der jede Anfrage protokolliert.

Alle drei Browser führen den Code in result.success aus, aber IE11 verwendet die alten Daten, die es zum ersten Mal erhalten hat, weiter, wobei FireFox und Chrome die neu abgerufenen Daten verwenden.

Ich habe die Webkonsole in IE11 auf Warnungen oder Fehler überprüft, aber es gibt keine.

Bearbeiten: Wie die gewählte Antwort vorgeschlagen, war es ein Caching-Problem. Ich habe den Server einen 'Cache-Control' Header zu der Antwort mit dem Wert 'No-Cache' hinzufügen. Dies hat das Problem gelöst.

+1

Es ist möglich, dass die Anforderung zwischengespeichert wird, da GET-Anforderungen zwischengespeichert werden können. FF und Chrome haben wahrscheinlich behinderte Caches, wegen laufenden Dev Tools oder anderen Gründen. Sie könnten einen Zeitstempel als URL-Abfragezeichenfolge "Prozessdaten?" + (new Date()). getTime() 'um zu sehen, ob es sich um ein Caching-Problem handelt. –

+1

@ Tilman: Das ist es. Das Hinzufügen dieses Codes hat es funktioniert. Ich werde diese Antwort in Kürze bearbeiten. – EvR

+0

Ich poste es einfach als Antwort wieder ;-) –

Antwort

8

Es ist möglich, dass die Anforderung zwischengespeichert wird, da GET-Anforderungen zwischengespeichert werden können. FF und Chrome haben wahrscheinlich behinderte Caches, wegen laufenden Dev Tools oder anderen Gründen. Sie könnten einen Zeitstempel als URL-Abfragezeichenfolge "processdata?" + (new Date()).getTime() anhängen, um festzustellen, ob es sich um ein Caching-Problem handelt.

Prettier Möglichkeiten IE-Caching zu verhindern, sind hier zu finden: Angular IE Caching issue for $http

0

Ich ziehe $ http.post verwenden, um jede Cache zu verhindern.

Verwandte Themen