2009-09-04 63 views
5

Làm cách nào để thực hiện một "gmail" quá dài "warning message bằng cách sử dụng jQuery Ajax API?Thực hiện thông báo "quá trình này mất quá nhiều thời gian" với jQuery

Đối với những người chưa bao giờ thấy thông báo này trên gmail, nó xuất hiện khi quá trình 'đăng nhập' mất quá nhiều thời gian để hoàn thành và sau đó một số giải pháp được đề xuất.

Tôi đang sử dụng jQuery Ajax trên trang web của mình và tôi muốn cảnh báo người dùng khi tải trang rất chậm và sau đó đề xuất một số giải pháp (liên kết để làm mới trang hoặc trang trợ giúp).

Trả lời

14

tôi muốn đề nghị một cái gì đó đơn giản như sắp xếp này:

function tooLong() { 
    // What should we do when something's taking too long? Perhaps show a `<div>` with some instructions? 
    $("#this-is-taking-too-long").show(); 
} 

// Then, when you're about to perform an action: 
function performSomeAction() { 
    var timer = setTimeout(tooLong, 10000); 
    $.get('/foo/bar.php', {}, function() { 
     // Success! 
     clearTimeout(timer); 
    }); 
} 
+0

Đối số cho clearTimeout nên giá trị trả về từ setTimeout (bộ đếm thời gian xử lý), không phải là phương pháp được gọi khi bộ đếm thời gian hết hạn. – tvanfosson

+0

Trên thực tế, 'clearTimeout' mong đợi id timeout, không phải là đối tượng hàm khi bạn có nó ở đây. – kangax

+0

Tôi đã hiểu logic và sắp xếp thời gian chờ, nhưng cách thức hoạt động của hàm setTimeout và trong trường hợp nào nó có thể áp dụng? Tôi không thể tìm thấy nó trên tài liệu jQuery. – fjsj

2

Tại sao không chỉ sử dụng được xây dựng trong jQuery ajax 'timeout' option. Đó là một thực hành tốt để sử dụng nó anyways, trong trường hợp bạn có vấn đề với cuộc gọi ajax của bạn. Hoặc, bạn có thể tái phát minh ra bánh xe;)

chỉnh sửa: và, er, tôi nghĩ bạn muốn kết hợp với chức năng lỗi.

+1

+1 nếu bạn đã sử dụng phương thức $ .ajax cho phép gọi lại lỗi. Nếu bạn muốn sử dụng get/load/post và chỉ muốn thông báo này mất quá nhiều thời gian, thì việc sử dụng set/clearTimeout sẽ được chấp nhận. – tvanfosson

+0

Bạn cũng có thể sử dụng phương thức $ .ajaxSetup - điều này sẽ ảnh hưởng đến tất cả các cuộc gọi ajax. – jonstjohn

+1

Ghi nhớ rằng lỗi hết thời gian chờ trong $ .ajax sẽ thực sự ngừng tìm kiếm phản hồi từ máy chủ, kết quả là "điều này không thể được xử lý" trái ngược với những gì OP muốn "đang thực hiện quá lâu". – jakeisonline

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