小编典典

为什么我不能使用jQuery触发来自卸载事件处理程序的AJAX请求?

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请求触发的操作也没有发生(我正在开发聊天应用程序,并且打算当用户关闭窗口时在数据库中记录一个条目)。


阅读 258

收藏
2020-07-26

共1个答案

小编典典

由于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'); 
}
2020-07-26