6

我正在从 Firefox 扩展发出 AJAX 请求。我有这个代码:

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/不存在(我假设)。我的问题是,为什么在传递给 transferFailed() 的 evt 对象中没有错误消息显示“域不存在”或“DNS 故障”或类似的东西?事件对象的所有属性都没有任何迹象表明问题是什么,没有消息,没有错误代码等。

不应该有某种迹象表明实际错误是什么?

4

2 回答 2

1

网络错误不会传播给调用者。

status(并且statusText,尽管它是服务器喜欢的任何东西)是关于 HTTP 的。

于 2013-09-04T15:58:31.823 回答
1

由于您使用 chrome-privileges 运行:

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

(@paa 在评论中所说的)。

请参阅(您可能需要QueryInterface/instanceof相应地):

于 2013-09-05T02:25:00.477 回答