2015-01-23 3 views
5

Ich bin immer in der Lage, IE11 abstürzen, wenn ich große/komplexe Json-Objekt mit Angulars $ http.post Methode post.

Ich habe Setup einen Winkel Beispiel, das in IE11 ausgeführt werden können, um das Verhalten zu sehen, die ich erlebe: http://plnkr.co/edit/yYaDy8d00VGV6WcjaUu3?p=preview

Dies ist der Code, der einen Absturz verursacht:

$http.post($scope.saveDocumentUrl, { "document": doc, "submit": submit, "trash": trash }).success(function (data) { 
      if (!data.Success) { 
       bootbox.alert(data.Message); 
      } else { 
       if (trash) { 
        $scope.periodReviewDocuments.pop(doc); 
        hideModalWindow(); //we call this in the event that the method was called from the document and not from the list. 
       } 

       if(submit){ 
        $scope.periodReviewDocuments.pop(doc); 
        resetForm(); 
        bootbox.alert("Your document has been submitted"); 
        hideModalWindow();       
       } 

      } 
      $scope.isBusy = false; 
     }).error(function (data, status) { 
      $scope.isBusy = false; 
      bootbox.alert("The server encountered an error and could not save your document. If this problem persists please contact the administrators"); 
     }); 

Dies ist jquery Arbeitscode:

$.ajax({ 
      url: $scope.saveDocumentUrl, 
      data: JSON.stringify({ "document": doc, "submit": submit, "trash": trash }), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      type: "POST" 
     }).done(function (data) { 
      if (!data.Success) { 
       bootbox.alert(data.Message); 
      } else { 
       if (trash) { 
        $scope.periodReviewDocuments.pop(doc); 
        hideModalWindow(); //we call this in the event that the method was called from the document and not from the list. 
       } 

       if (submit) { 
        $scope.periodReviewDocuments.pop(doc); 
        resetForm(); 
        bootbox.alert("Your document has been submitted"); 
        hideModalWindow(); 
       } 

      } 
      $scope.isBusy = false; 
     }).fail(function (data, status) { 
       $scope.isBusy = false; 
       bootbox.alert("The server encountered an error and could not save your document. If this problem persists please contact the administrators"); 
     }) 

Dies ist, was ich weiß, so weit:

  1. Dieses Problem tritt nur in IE11 - Windows 8.1/IE 11 (11.0.9600.17498) auf. Aktualisieren Sie die Versionen 11.0.15 (KB3008923).
  2. Der Browser stürzt ab, nachdem die Anfrage gesendet wurde.
  3. Ich habe die serverseitige eingehende Anfrage inspiziert und die Nutzlast wurde perfekt serialisiert/deserialisiert.
  4. Ich habe die Funktion $ http.post mit jquery $ .ajax ersetzt und es löste das Problem, aber das ist keine Lösung, da ich Winkel verwenden.
  5. Ich habe 3 Tage in dieser Frage verloren
+6

Ich arbeite am IE-Team und bin in der Lage, das Problem mit Ihrer Demo zu wiederholen. Ich werde dies sofort dem Rest des Teams zur Überprüfung zukommen lassen und alle notwendigen Rückmeldungen weiterleiten. Danke für das Teilen. – Sampson

+0

Wie viele Artikel hat Ihre Antwort? Kannst du mit Paging und Lazy loading die Aufzeichnungen durchkommen? –

+0

@ JonathanSampson vielen Dank - lassen Sie mich wissen, wenn Sie weitere Details benötigen. – Greg

Antwort

3

In Ihrer Version von Internet Explorer JSON.stringify mit einem Übersetzungs Filter stürzt IE für große Datenmengen fordern.

Der hier Trick ist das Objekt selbst, bevor er zu $ ​​http.post

http://plnkr.co/edit/PbMxMY?p=preview

var body = {"document" ..... 

    var jsonData = JSON.stringify(body); 

    $http.post("/test", jsonData).then(function(response) { 
    console.log(response.data); 
    }); 

    $interval(function() { 
    $rootScope.tick = Date.now(); 
    }, 500); 
}); 
+0

Zustimmen - dies ist eine Möglichkeit, das Problem zu vermeiden, aber ich hatte bereits Hunderte von Endpunkten geschrieben, als dieser IE-Fehler auftrat ... es war keine Option für mich, jeden Endpunkt zu ändern, um eine serialisierte Zeichenfolge zu akzeptieren :( – Greg

+1

Wir verwenden einen allgemeinen Service-Wrapper für Post-Aufrufe, so dass es für uns einfach war, diesen Fix zu implementieren. –

0

in diesem Monat IE-Updates behoben stringify, wahrscheinlich von https://support.microsoft.com/en-us/kb/3075516

Als Randbemerkung Sie können dies erkennen, indem Sie ScriptEngineBuildVersion in JavaScript verwenden. Stellen Sie sicher, dass Sie auch ScriptEngineMajorVersion und ScriptEngineMinorVersion verwenden und auf die Dateiinformationen im KB-Artikel verweisen.

Verwandte Themen