2013-03-04 27 views
5

Giả sử tôi có một cuộc gọi jQuery Ajax hơi dài chạy (nói 5 giây) như sau:Làm thế nào để nói nếu JQuery Lỗi Có nghĩa là cuộc gọi bị gián đoạn

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     alert('Error!'); 
    } 
}); 

Bây giờ giả sử trong khi chờ đợi cho quá trình thứ hai năm của tôi để chạy người dùng phát triển thiếu kiên nhẫn và quyết định nhấn một số loại điều hướng trên trang của tôi. Điều gì xảy ra trong cuộc gọi ở trên là người dùng nhận được thông báo Lỗi khi anh nhấp vào một liên kết.

Tôi muốn cảnh báo lỗi hiển thị nếu có lỗi, nhưng nếu tất cả những gì xảy ra là người dùng quyết định điều hướng, tôi không muốn cảnh báo lỗi hiển thị. Tôi có thể làm cái này như thế nào?

Nói cách khác, có một số giá trị tôi có thể kiểm tra (xhr.status có thể?) Sẽ cho tôi biết rằng lỗi xảy ra chỉ đơn giản là quá trình bị gián đoạn vì vậy tôi có thể biết bỏ qua lỗi?

Cảm ơn!

+1

Kiểm tra đối số thứ 2 và thứ 3 của cuộc gọi lại lỗi. –

+0

Đối số thứ hai là "lỗi". Đối số thứ ba là "". Không hữu ích trong trường hợp này từ những gì tôi có thể nói. –

+0

Trong trường hợp đó, hãy xem xét các thuộc tính của đối số đầu tiên. –

Trả lời

8

Khi gần như tôi có thể nói, cách tốt nhất để làm điều này là để kiểm tra xhr.readyState tại của bạn xử lý lỗi. Bất kỳ giá trị nào nhỏ hơn 4 chỉ ra rằng quá trình vẫn chạy vì vậy điều này có nghĩa là có điều gì đó đang xảy ra trong trình duyệt để làm gián đoạn nó.

Bạn cũng muốn gọi xhr.abort() để cố gắng dừng quá trình ajax để người dùng không phải đợi nó hoàn tất trước khi điều hướng thực sự xảy ra, mặc dù cho tôi gọi đến xhr.abort () không thực sự tăng tốc độ.

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     if (xhr.readyState < 4) { 
      xhr.abort(); 
     } 
     else { 
      alert('Error!'); 
     } 
    } 
}); 
3

Đọc documentation, tôi sẽ đánh bạo đoán rằng xử lý lỗi của bạn nên được như thế này:

error(xhr, textStatus, errorThrown) { 
    if(textStatus != "abort") { 
     alert("Error!"); 
    } 
} 
+0

Đó là những gì tôi nghĩ là tốt, nhưng thực sự nếu tôi kiểm tra trạng thái đó là "lỗi" khi lỗi là gián đoạn. –

+0

'errorThrown' nói gì? –

+0

Xem ở trên. Đó là chuỗi rỗng. –

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