为什么我不能使用jQuery从unload事件处理程序激发AJAX请求?

我有以下代码,用于在用户关闭聊天窗口时记录事件:

$(window).unload( function() { test(); }); function test() { alert("Hi"); $.ajax({ type: "POST", url: baseUrl + 'Index/test', data: "user_id=" + "Nisanth" + "& chat_id=" + 2, success: function(msg){ alert(msg); } }); alert('Success'); } 

“Hi”和“Success”消息都提示正常,但AJAX回调中的警报没有…我打算通过AJAX请求触发的操作也没有发生(我正在开发一个聊天应用程序,并打算在用户关闭窗口时记录数据库中的条目)。

因为ajax是异步的,所以在正确发送响应之前页面正在卸载,从而有效地终止连接。 尝试设置async:false; ,虽然这会延迟卸载页面,直到收到响应,如果服务器运行缓慢,这对于用户体验来说并不是很好。

 $(window).unload( function () { test(); }); function test() { alert("Hi"); $.ajax({ async: false, type: "POST", url: baseUrl + 'Index/test', data: "user_id=" + "Nisanth" + "& chat_id=" + 2, success: function(msg){ alert(msg); } }); alert('Success'); } 

问题是数据的格式。 它被转换为查询字符串,它必须是键/值对,例如:“user_id:value”