Jquery 服务器请求在AJAX beforeunload调用之前完成

Jquery 服务器请求在AJAX beforeunload调用之前完成,jquery,ajax,ruby-on-rails-4,onbeforeunload,Jquery,Ajax,Ruby On Rails 4,Onbeforeunload,我有一个Rails 4聊天应用程序,它有一个小的时间问题。当用户在活动聊天页面上并希望离开时,应用程序应通知他们当前有聊天记录,并且他们必须验证是否希望离开该页面。我使用以下jQuery实现了这一点: jQuery(window).on('beforeunload', function(){ if(jQuery('#chatListUL li').length > 0){ return 'You have active sessions. Are you sure you wa

我有一个Rails 4聊天应用程序,它有一个小的时间问题。当用户在活动聊天页面上并希望离开时,应用程序应通知他们当前有聊天记录,并且他们必须验证是否希望离开该页面。我使用以下jQuery实现了这一点:

jQuery(window).on('beforeunload', function(){
  if(jQuery('#chatListUL li').length > 0){
    return 'You have active sessions. Are you sure you want to leave this page?';
  }
}).unload(function(){
  jQuery.ajax({
    url: '/chat/chat_sessions/removeUserFromAll',
    type: 'DELETE',
    dataType: 'json',
    async: false
  });
});
这将按预期工作,并将用户从所有当前聊天中删除

...
enrolled_chats = ChatSessionUserList.where(user_id: current_user.id)
enrolled_chats.each do |ec|
  chat_session = ec.chat_session
  ec.destroy
  if chat_session.users.length < 2
    chat_session.open = false
    chat_session.save
  ...
  end
end
问题是,当概览页面加载时,它会将以前所有的活动聊天记录都计算为仍然打开。查看日志,我可以看到服务器对概览页面的请求在beforeunload操作中发送的AJAX请求之前完成。所以,用户刚刚离开的聊天在被标记为关闭之前被放入实例变量中


如何确保beforeunload调用在实际服务器请求之前完成?我知道我可以在概览页面上调用AJAX,在页面加载后加载活动聊天;但我希望避免再次调用服务器。

您是否在本地服务器上测试它?因为无论如何都没有可靠的方法从unload发送ajax请求,或者甚至在unload事件之前发送ajax请求,用户仍然可以按下计算机关机按钮,现在它正在rails服务器上运行。
...
@current_filled_requests = ChatSession.where(open: true)
...