2013-09-04 25 views
6

Tôi đang thực hiện yêu cầu AJAX từ tiện ích mở rộng của Firefox. Tôi có mã này:Không phải sự kiện lỗi của xmlhttprequest có thông báo lỗi không?

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

Yêu cầu không thành công vì http://www.foo.bar/ không tồn tại (tôi giả định). Câu hỏi của tôi là, tại sao không có thông báo lỗi trong đối tượng evt được truyền cho transferFailed() có nội dung "Miền không tồn tại" hoặc "lỗi DNS" hoặc nội dung nào đó? Không có thuộc tính nào của đối tượng sự kiện có bất kỳ dấu hiệu nào về vấn đề, không có thông báo, không có mã lỗi, v.v.

Không nên có một số dấu hiệu cho thấy lỗi thực tế là gì?

Trả lời

1

Vì bạn đang chạy với chrome-đặc quyền:

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

(những gì @paa nói trong bình luận).

See (bạn có thể cần phải QueryInterface/instanceof cho phù hợp):

1

Lỗi mạng không được truyền cho người gọi.

status (và statusText, mặc dù đó là bất kỳ máy chủ nào thích) là về HTTP.

+0

Có cách nào để có được các lỗi mạng? – Nick

+0

Bạn có thể thử thuộc tính 'kênh' chỉ mozilla. Nếu nó hợp lệ bên trong trình xử lý lỗi, thì trong ví dụ của bạn 'this.channel.status' sẽ trả về' Components.results.NS_ERROR_UNKNOWN_HOST'. – paa

Các vấn đề liên quan