I am consistently able to crash IE11 when I post large/complex json object using Angulars $http.post method.
I have setup an angular example which can be run in IE11 to see the behavior which I am experiencing: http://plnkr.co/edit/yYaDy8d00VGV6WcjaUu3?p=preview
This is the code which causes a crash:
$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");
});
This is the jquery working code:
$.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");
})
This is what I know so far:
In your version of Internet Explorer calling JSON.stringify with a translation filter crashes IE for large data sets.
The trick here is to stringify the object yourself before passing to $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);
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With