2013-09-04 17 views
6

Sto lavorando per creare una richiesta AJAX da un'estensione per Firefox. Ho questo codice:L'evento di errore xmlhttprequest non dovrebbe contenere un messaggio di errore?

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 richiesta ha esito negativo perché http://www.foo.bar/ non esiste (presumo). La mia domanda è, perché non c'è nessun messaggio di errore nell'oggetto evt passato a transferFailed() che dice "Il dominio non esiste" o "Errore DNS" o qualcosa del genere? Nessuna delle proprietà dell'oggetto evento ha alcuna indicazione su quale sia il problema, nessun messaggio, nessun codice di errore, ecc.

Non dovrebbe esserci qualche indicazione su quale sia l'errore effettivo?

risposta

1

Dal momento che si sta eseguendo con cromo-privilegi:

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

(quello @paa detto nel commento).

See (potrebbe essere necessario QueryInterface/instanceof di conseguenza):

1

Gli errori di rete non vengono propagati al chiamante.

status (e statusText, sebbene sia quello che piace al server) riguarda HTTP.

+0

C'è un modo per ottenere errori di rete? – Nick

+0

Si potrebbe provare l'attributo 'channel' di mozilla-only. Se è valido all'interno del gestore degli errori, nel tuo esempio 'this.channel.status' restituirà' Components.results.NS_ERROR_UNKNOWN_HOST'. – paa

Problemi correlati