2012-05-05 26 views
12

Tôi cố gắng để sử dụng try-catch báo cáo để xử lý các lỗi từ XMLHTTPRequest, như dưới đây:try-catch không làm việc với XMLHttpRequest

var xhr = new XMLHttpRequest(); 
xhr.open('POST', someurl, true); 
try{ 
    xhr.sendMultipart(object); 
} 
catch(err){ 
    error_handle_function(); 
} 

Khi có một lỗi 401 ném bởi xhr.sendMultipart, các error_handle_function là không được gọi. Bất kỳ ý tưởng làm thế nào để sửa lỗi này?

Cảm ơn!

Trả lời

19

Tôi nghĩ bạn không thể bắt lỗi máy chủ theo cách đó. bạn nên kiểm tra mã trạng thái thay vì:

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange=function() { 
    if (xhr.readyState === 4){ //if complete 
     if(xhr.status === 200){ //check if "OK" (200) 
      //success 
     } else { 
      error_handle_function(); //otherwise, some other code was returned 
     } 
    } 
} 
xhr.open('POST', someurl, true); 
xhr.sendMultipart(object); 
+0

Nếu bạn cài đặt [Web Server Notifier] (https://chrome.google.com/webstore/detail/web-server-notifier/najdkmbedaehkepolllmpdfccdgooajh) trên Chrome và thử ví dụ: để truy cập play.google.com, bạn sẽ thấy lỗi 404 thông thường mà tôi không thể ngăn chặn thậm chí kiểm tra mã trạng thái trước đây. Bất kỳ ý tưởng về lý do tại sao? – cregox

+0

Trên dòng 3, đối tượng xmlhttp đến từ đâu? –

+0

"THEO GOLLY IT WORKED !!" .. hãy bật lên .. –

5

Khi có một lỗi 401 ném bởi xhr.sendMultipart

Nó không được ném. Nó đã được trả về một cách không đồng bộ.

Điều đó có nghĩa là mã này kết thúc chạy trước khi phản hồi đến. Đó là những gì true trong các phương tiện gọi open của bạn.

Bạn cần đăng ký trình xử lý onReadyStateChange và xử lý các phản hồi lỗi tại đó.

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