2013-09-04 18 views
6

私はFirefoxの拡張機能からAJAXリクエストを作成しようとしています。xmlhttprequestのエラーイベントにエラーメッセージはありませんか?

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]); 
} 

http://www.foo.bar/は(私は仮定)が存在しないため、要求が失敗した:私はこのコードを持っています。私の質問は、 "ドメインが存在しない"または "DNS障害"とかそのような性質の何か、というtransferFailed()に渡されたevtオブジェクトにエラーメッセージがないのはなぜですか?イベントオブジェクトのプロパティには、問題の内容、メッセージ、エラーコードなどの情報がありません。

実際のエラーの表示はありませんか?

答えて

1

あなたはクローム特権で実行しているので:

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

(コメントで言っ@paa)。

を参照してください(あなたはそれに応じてQueryInterface/instanceofに必要になる場合があります):ネットワークエラーを取得する方法が

1

ネットワークエラーは発信者に伝播されません。

status(およびstatusText、サーバーが好きなものでも)はHTTPに関するものです。

+0

ありますか? – Nick

+0

あなたはmozillaだけの 'channel'属性を試すことができます。それがエラーハンドラ内で有効であれば、あなたの例では 'this.channel.status'は' Components.results.NS_ERROR_UNKNOWN_HOST'を返します。 – paa

関連する問題