2011-07-25 30 views
7

Tôi muốn thực hiện cuộc gọi AJAX trước khi người dùng rời khỏi trang (vì vậy về cơ bản trước khi rời trang và trước khi làm mới trang)?Làm thế nào để biết khi nào một người dùng đã rời trang và làm mới trang

Làm cách nào để thực hiện điều này. Tôi đã cố gắng để tìm kiếm một cái gì đó với jQuery nhưng didnt nhận được bất cứ điều gì.

Tôi cố gắng để sử dụng đoạn mã sau -

window.onbeforeunload(function(){alert('before unload');}); 

Nhưng hộp cảnh báo không bao giờ xuất hiện khi rời khỏi trang (đóng tab trình duyệt) hoặc làm mới trang.

Làm cách nào để thực hiện điều này?

+1

onbeforeunload, để kiến ​​thức của tôi, là một sự kiện IE. những trình duyệt khác có thể đã triển khai nó, nhưng không có gì xác định. Có lẽ giải thích mục đích và chúng ta có thể đến một giải pháp thay thế? Bắt người dùng rời đi khá khó khăn ... –

+0

PS, [MDN onbeforeunload] (https://developer.mozilla.org/en/DOM/window.onbeforeunload). Tương tự, [tài liệu MSDN] (http://msdn.microsoft.com/en-us/library/ms536907%28VS.85%29.aspx) trên đó. –

+0

Brad - Tôi đang thực hiện một số theo dõi liên quan đến video trên YouTube như thời lượng thực tế mà người dùng đã xem video. Đối với điều này, tôi đang sử dụng một tỷ lệ lấy mẫu (như 5 giây) và cập nhật một biến JS toàn cầu cần phải được gửi đến máy chủ khi video kết thúc. Ngoài ra, người dùng có thể rời khỏi/tải lại trang sau khi xem một phần của nó (trước khi đến cuối video). Vì vậy, tôi cần biết khi nào người dùng rời khỏi/tải lại trang để tôi có thể thực hiện cuộc gọi AJAX đến máy chủ. Ngoài ra, muốn hỏi xem đây có phải là cách được khuyến nghị để làm điều này không? – Siddharth

Trả lời

5
$(window).unload(function() { 
    alert('Visitor left page'); 
}); 

Về cuộc gọi ajax, bạn có thể làm điều đó, nhưng bạn phải thiết lập các async-false.

$.ajax({ 
    async: false, 
    ... 
}); 
+0

Lưu ý giá trị của nó không hoạt động trên một số thiết bị, chẳng hạn như iPad – Blowsie

7

Bạn nên cố gắng unload() từ jquery:

$(window).unload(function(){ 
    //Do your call 
    alert('before unload'); 
    }); 

oro bạn có thể sử dụng các sự kiện beforeunload. Bạn nên kiểm tra nó tốt vì trình duyệt có xu hướng imlement những điều khác nhau. lấy từ tài liệu jquery:

Xử lý chính xác sự kiện dỡ tải đã thay đổi từ phiên bản sang phiên bản trình duyệt. Ví dụ: một số phiên bản Firefox kích hoạt sự kiện khi liên kết được theo dõi, nhưng không phải khi cửa sổ đóng. Trong cách sử dụng thực tế, hành vi phải được kiểm tra trên tất cả các trình duyệt được hỗ trợ, và tương phản với sự kiện trước khi tải độc quyền.

+0

+1 đánh bại tôi sau 6 giây! – Shef

+0

Cảm ơn! Giải pháp này làm việc cho tôi. Tôi thấy hộp Cảnh báo khi tôi làm mới trang cũng như khi đóng tab cửa sổ/trình duyệt. Tôi chỉ cần hỏi rằng tôi làm một cuộc gọi ajax ở đó, tôi có thể chắc chắn rằng máy chủ của tôi sẽ nhận được cuộc gọi - Tôi không phải lo lắng về phản hồi. – Siddharth

+1

Vâng, nếu bạn đặt cuộc gọi trước khi hộp cảnh báo, bạn sẽ được khá chắc chắn rằng cuộc gọi đến máy chủ của bạn. –

2

Mã của bạn chỉ đơn giản là sai. Các unbeforeunload được sử dụng để hỏi người đó nếu anh ta thực sự muốn rời khỏi trang. Bạn cần tải xuống.

window.onunload = function() { 
    // Make your AJAX call 

} 

phương pháp tốt hơn sử dụng jQuery.unload()

+0

Đã làm điều đó bằng cách sử dụng JQuery. Xin hãy giúp tôi với bình luận tôi đăng trên câu trả lời ở trên. – Siddharth

+0

Nicola là đúng, lên đó. – Claudio

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