Xác định xem lỗi $ .ajax có quá thời gian không


205

Tôi đang sử dụng phép thuật của jQuery.ajax( settings ).

Tuy nhiên, tôi tự hỏi liệu có ai đã chơi với cài đặt thời gian chờ nhiều không?

Tôi biết về cơ bản là chỉ ra thời gian địa phương cho một yêu cầu, nhưng nó có thể kích hoạt bất cứ điều gì nếu hết thời gian không? Hay nó chỉ đơn giản là ngừng lắng nghe phản hồi?

Đọc trang web jQuery, tôi có thể thấy không có đối số nào được thông qua, vì vậy có vẻ như một thiết lập đơn giản với một khả năng. Cái nào cũng được.

Nhưng, tôi muốn kích hoạt cảnh báo hoặc một số chức năng nếu hết thời gian chờ. Tôi có thể thấy rằng cài đặt lỗi không được kích hoạt, trong trường hợp này.

Đây là đoạn trích của tôi:

$("form#testform").submit(function(){ 

 var allFormValues = $("form#testform").serialize(); 

   $.ajax({
    cache:false,
    timeout:8000,  // I chose 8 secs for kicks
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ alert(response); }
   });

});

Có ai biết làm việc nhiều hơn với thời gian chờ không?

Câu trả lời:


356

Nếu trình xử lý sự kiện lỗi của bạn nhận ba đối số (xmlhttprequest, textstatus và thông báo) khi hết thời gian chờ, trạng thái đối số sẽ là 'hết thời gian'.

Theo tài liệu jQuery :

Các giá trị có thể có cho đối số thứ hai (ngoài null) là "hết thời gian", "lỗi", "không sửa đổi" và "trình phân tích cú pháp".

Bạn có thể xử lý lỗi của bạn cho phù hợp sau đó.

Tôi đã tạo ra fiddle này chứng minh điều này.

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

Với jsFiddle, bạn có thể kiểm tra các cuộc gọi ajax - nó sẽ đợi 2 giây trước khi trả lời. Tôi đặt cài đặt thời gian chờ là 1 giây, do đó, nó sẽ báo lỗi và gửi lại một văn bản 'hết thời gian' cho bộ xử lý lỗi.

Hi vọng điêu nay co ich!


3
Vui mừng nó đã làm việc! Vâng, họ loại những giá trị trạng thái trong tài liệu.
David Hoerster

102
Họ giấu rất nhiều trong tài liệu.
Aaron

4
@JochemKuijpers Fiddler sẽ đợi 2 giây, do đó thời gian chờ là 1 giây được đáp ứng. Đọc ....
Rickjaah

2
Bạn có thể giải thích các vars x, t, m là gì không?
bart

3
(x) mlhttprequest, (t) extstatus và (m) essage
JupiterP5
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.