2013-11-27 15 views
10

Trong bảng điều khiển JavaScript của Chrome, nếu tôi chạy này:Làm thế nào để bắt NetworkError trong JavaScript?

var that = new XMLHttpRequest(); 
that.open('GET', 'http://this_is_a_bad_url.com', false); 
that.send(); 

tôi nhận được một lỗi cố ý mong đợi:

NetworkError: A network error occurred. 

Tôi muốn bắt này, vì vậy tôi sử dụng:

var that = new XMLHttpRequest(); 
that.open('GET', 'http://this_is_a_bad_url.com', false); 
try { 
    that.send(); 
} catch(exception) { 
    if(exception instanceof NetworkError) { 
    console.log('There was a network error.'); 
    } 
} 

Tuy nhiên, tôi gặp lỗi về NetworkError không được xác định:

ReferenceError: NetworkError is not defined 

Tôi có thể bắt NetworkError như thế nào?

Trả lời

11

Tôi nghĩ rằng những gì bạn có nghĩa là:

if(exception.name == 'NetworkError'){ 
    console.log('There was a network error.'); 
} 

Tôi không tin Lỗi là một thể hiện của NetworkError, nhưng ném theo cách này:

throw { 
    name: 'NetworkError', 
    message: 'A network error occurred.' 
    // etc... 
} 
+1

Công trình này tuyệt vời. Tôi cũng nên hỏi: Trong giao diện điều khiển JS của Chrome, nó vẫn hiển thị "GET (url)" với dấu X màu đỏ ở bên trái của nó trong khi kiểm tra lỗi ở dưới cùng bên phải của bảng điều khiển. Có cách nào để bắt được điều này không? – Synthead

+1

Bàn điều khiển chrome của Afaik hiển thị tất cả các yêu cầu không thành công theo cách này, việc bắt lỗi sẽ ngăn vi phạm mã của bạn –

0

Nhìn vào sự kiện onreadystatechange. Bạn có thể nhận được trạng thái của phản hồi.

+2

trạng thái đọc không thay đổi cho đến sau khi send() được gọi, nhưng cuộc gọi send() là những gì tạo ra ngoại lệ. – broofa

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