2012-05-15 55 views
5

Tôi có đoạn mã sau (chỉ phần có liên quan):XMLHttpRequest.open() xử lý ngoại lệ

xhttp=new XMLHttpRequest(); 
xhttp.open("GET",doc_name,false); 
xhttp.send(); 
xmlDoc=xhttp.responseXML; 
if(xmlDoc==null) 
{ 
    xmlDoc=loadXMLDoc(defaultXml); 
} 

này chạy tốt như tôi tải một tập tin xml mặc định nếu file được chỉ định không tồn tại nhưng cho thấy một Lỗi 404 chỉ trong bảng điều khiển nếu tệp không tồn tại. (Lỗi này không phản ánh bất kỳ nơi nào trong trang ngoại trừ bảng điều khiển).

Câu hỏi của tôi là làm cách nào để kiểm tra ngoại lệ này & là cần thiết để thêm một đoạn mã bổ sung để kiểm tra sự tồn tại của tệp khi mã chạy mà không có mã?

+0

Hãy thử cái này, tôi tìm kiếm bạn đang tìm kiếm: [AJAX - Sự kiện onreadystatechange] (http://www.w3schools.com/Ajax/ajax_xmlhttprequest_onreadystatechange.asp) – benqus

Trả lời

4

Bạn có thể truy cập mã phản hồi HTTP qua xhttp.status; hoặc 200 (OK) hoặc 304 (Không được sửa đổi) thường được coi là yêu cầu thành công.

xhttp=new XMLHttpRequest(); 
xhttp.open("GET",doc_name,false); 
xhttp.send(); 

if (xhttp.status === 200 || xhttp.status === 304) { 
    xmlDoc=xhttp.responseXML; 
    if(xmlDoc==null) 
    { 
     xmlDoc=loadXMLDoc(defaultXml); 
    } 
} 

Hãy chắc chắn rằng bạn đang khai báo các biến của bạn đầu tiên sử dụng var, nếu không bạn sẽ phải globals tiềm ẩn, đó là xấu.

Cũng đảm bảo bạn có lý do chính đáng để thực hiện việc này một cách đồng bộ; XHR đồng bộ khóa trình duyệt trong khi yêu cầu đang chờ xử lý. Làm cho nó không đồng bộ là cao được khuyến nghị.

Đối với phần thứ hai của câu hỏi của bạn, không có vấn đề gì - bao giờ hết; miễn là ứng dụng của bạn có thể xử lý ngoại lệ. (có vẻ như đang làm)

+0

yup Tôi biết rằng, tôi tuyên bố biến bằng cách sử dụng var & am làm cho nó đồng bộ (vì một lý do), tập tin là nhỏ, do đó làm cho nó đồng bộ không phải là một vấn đề. – gopi1410

+0

Nhưng tôi có thực sự cần phải thực hiện việc kiểm tra này khi mã đang chạy tốt mà không có nó? Bất kỳ nhược điểm nào của lỗi trong bảng điều khiển? – gopi1410

+0

@ gopi1410: Không có vấn đề gì - bao giờ hết; miễn là ứng dụng của bạn có thể xử lý nó (điều này dường như làm). – Matt