XMLHttpRequest est toujours l'appel de “charger” écouteur d'événement, même lorsque la réaction a statut de l'erreur
Je suis en utilisant FormData à ajax chargement d'un fichier. Le téléchargement fonctionne, mais le problème est que le "erreur" de rappel n'est jamais invoquée. Même si ma réponse HTTP 500 erreur interne du serveur (pour tester cela, je tweak serveur de répondre avec plus de 500), la "charge" callback n'est appelé.
function upload_image() {
var form = document.getElementById('upload_image_form');
var formData = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", function(e) {
alert("Success callback");
}, false);
xhr.addEventListener("error", function(e) {
alert("Error callback");
}, false);
xhr.open("POST", "/upload_image");
xhr.send(formData);
}
Des idées? Je suis en essais ce sur Chrome.
Vous devez vous connecter pour publier un commentaire.
Cette installation devrait fonctionner mieux à vos besoins:
Dans votre code d'erreur de rappel n'est jamais appelé ainsi parce qu'il est déclenché uniquement par le réseau d'erreurs au niveau de l', il ignore les codes de retour HTTP.
La charge de l'événement est appelé chaque fois que le serveur répond avec un message. La sémantique de la réponse n'a pas d'importance; ce qui est important, c'est que le serveur a répondu (dans ce cas, avec un statut de 500). Si vous souhaitez postuler erreur sémantique de l'événement, vous avez à traiter de la situation vous-même.
code de EJS
par l'exemple de code
il est clair que l'erreur de réseau n'a pas de réponse, il déclenche l'événement d'erreur.
réponse de déclenchement de l'événement load
et la vous avez à décider quoi faire avec le statut de la réponse
Expansion sur @riches remer réponse, voici comment vous pouvez accéder à l'état de vous-même:
Veuillez noter que l'accès de la
e.currentTarget.status
propriété de la réponse de l'événement (e
). Ressemble le statut est en fait disponible par dee.{currentTarget,target,srcElement}.status
- je ne suis pas sûr que l'on devrait être utilisé comme la meilleure pratique, cependant.