2012-03-14 36 views
10

Tôi đang phát triển một cuộc trò chuyện php/javascript.Làm thế nào để thực hiện chức năng ajax onbeforeunload?

Khi người dùng đăng nhập, tên người dùng của họ được chèn vào bảng MySQL có tên queue. Chèn này trả về số mysql_insert_id() sẽ được lưu trữ trong biến số phiên được gọi là $_SESSION['CHAT_QUEUE_ID']

Tôi cần hàng bảng MySQL sẽ bị xóa khi người dùng đóng trang.

Tôi đã thử các sau đây, nhưng không thành công:

js nộp

window.onbeforeunload = closeSession; 
function closeSession(){ 
    $.ajax({ 
     url: "/chat/process/chat.php", 
     type: "GET" 
    }); 
    return "disconnected"; 
} 

chat.php

$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID']; 
// query, etc 

Có cách nào để làm điều này?

+3

Bạn có biết rằng trình duyệt hỗ trợ cho ' 'onbeforeunload'' bị hạn chế? Ví dụ. opera không hỗ trợ nó. – ckruse

+0

Tôi đã không nghĩ về điều đó. Bất kì lời đề nghị nào? – matheusvmbruno

+2

Phương pháp phổ biến là xác định thời gian chờ. Nếu người dùng không có hoạt động trong một khoảng thời gian cụ thể thì anh ta sẽ bị ngắt kết nối. – ckruse

Trả lời

20

Bạn kích hoạt ajax async (mặc định cho jquery - ajax). Nhưng trình duyệt sẽ không chờ đợi bất cứ điều gì về dỡ hàng.

thử đặt async : false trong cài đặt ajax. Nhưng bạn không bao giờ có thể chắc chắn rằng điều này sẽ làm việc trong tất cả các trình duyệt mọi lúc.

xem bình luận ở đây: http://api.jquery.com/unload/#dsq-comment-body-132164390

+0

Nó hoạt động hoàn hảo. nên nghĩ về điều đó trước khi ... THANKS! – matheusvmbruno

+0

Bạn cũng được chào đón matheusvmbruno – StilgarBF

+2

Ngoài ra - nếu bạn đang kích hoạt cuộc gọi ajax cùng chức năng mà bạn sử dụng không đồng bộ (hoặc một số cuộc gọi ajax), bạn có thể đặt chúng thành không đồng bộ trên toàn cầu trong báo cáo onbeforeunload của mình: \t \t $ .ajaxSetup ({ \t \t \t không đồng bộ: false \t \t}); – JSP64

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