2

Ich habe den folgenden Code, der funktioniert perfekt auf Mozilla, Chrome, aber nicht auf Microsoft Edge oder Internet Explorer. Hier ist was passiert.

Wenn Benutzer lädt eine Webseite ich den folgenden Code auslösen:

$http.get("/api/items") 
     .then(function (response) { 
      angular.copy(response.data, $scope.items); 
     }, function (error) { 
      $scope.errorMessage = error.statusText; 
     }) 
    .finally(function() { 
     $scope.isBusy = false; 
    }); 

, die alle Werte in die <ul> zieht. Dieser Teil funktioniert normalerweise in allen Browsern. Jedoch, wenn ich triggern die folgenden:

$scope.interval = $interval(function() { 
     $http.get("/api/items") 
      .then(function (response) { 
       //success 

       //loop through the response 
       angular.forEach(response.data, function (value, key) { ... more code here} 

dann plötzlich die Antwort ist nicht mehr von meinem Web-api. Was ich meine ist, dass, als ich meine Anwendung debugging und Breakpoint in meine GET API setzte (ich meine unter Visual Studio in meinem MVC Controller), konnte ich nicht sehen, dass der Anruf von Microsoft Edge ausgelöst wurde.

Hier ist, was Netzwerk Inspektor wie von Chrome aussieht:

enter image description here

und dieses ist von Rand:

enter image description here

Soweit ich verstehe, hat Rand, das nur ein realer XHR-Aufruf zu meinem GET, und alle verbleibenden werden nur aus dem Speicher zwischengespeichert?

Wie kann man dieses Problem lösen? Warum passiert das überhaupt?

Antwort

0

Am Ende habe ich herausgefunden, dass das Problem mit Angular beim Speichern von Cache ist. Es gibt zwei Optionen kann man (von anderen Stackoverflow Beiträge genommen), verwenden:

1) Angular-Methode (die aus unbekanntem Grund für mich nicht funktioniert):

myModule.config(['$httpProvider', function($httpProvider) { 
    //initialize get if not there 
    if (!$httpProvider.defaults.headers.get) { 
     $httpProvider.defaults.headers.get = {};  
    }  

    // Answer edited to include suggestions from comments 
    // because previous version of code introduced browser-related errors 

    //disable IE ajax request caching 
    $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT'; 
    // extra 
    $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache'; 
    $httpProvider.defaults.headers.get['Pragma'] = 'no-cache'; 
}]); 

2) Die ASP.NET-Weg von dekorieren GET-Methode:

[ResponseCache(NoStore = true, Duration = 0)]