6 votes

L'événement d'erreur de xmlhttprequest ne devrait-il pas contenir un message d'erreur ?

Je travaille sur une requête AJAX à partir d'une extension Firefox. J'ai ce code :

function GetMenu(){
   var oReq = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();

   // Setup event handlers - must be set before calling open()
   oReq.addEventListener("progress", updateProgress, false);
   oReq.addEventListener("load", transferComplete, false);
   oReq.addEventListener("error", transferFailed, false);
   oReq.addEventListener("abort", transferCanceled, false);

   oReq.open('POST', "http://www.foo.bar/", true);
   oReq.send('your=data&and=more&stuff=here');
}

function transferFailed(evt) {
  Application.console.log("An error occurred while transferring the file.");
  Application.console.log(this.responseText);
  for(var i in evt)     
     Application.console.log(i+ ' => '+evt[i]);
}

La demande échoue car http://www.foo.bar/ n'existe pas (je suppose). Ma question est la suivante : pourquoi n'y a-t-il pas de message d'erreur dans l'objet evt transmis à transferFailed() qui dise "Le domaine n'existe pas" ou "Échec DNS" ou quelque chose de ce genre ? Aucune des propriétés de l'objet event n'a d'indication sur la nature du problème, pas de message, pas de code d'erreur, etc.

Ne devrait-il pas y avoir une indication de l'erreur réelle ?

1voto

paa Points 5023

Les erreurs de réseau ne sont pas transmises à l'appelant.

status (et statusText Bien que le serveur puisse l'utiliser à sa guise, il s'agit de HTTP.

1voto

nmaier Points 14425

Puisque vous utilisez les privilèges de chrome :

function transferFailed(evt) {
 if (this.channel && this.channel.status == Components.results.NS_ERROR_UNKNOWN_HOST) {
   alert("DNS error");
 }
}

(ce que @paa a dit dans le commentaire).

Voir (il se peut que vous deviez QueryInterface / instanceof en conséquence) :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X