javascript - 为什么我不能使用 jQuery 从卸载事件处理程序中触发 AJAX 请求?

标签 javascript jquery ajax jquery-events

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

$(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'); 
} 

关于javascript - 为什么我不能使用 jQuery 从卸载事件处理程序中触发 AJAX 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274949/

相关文章:

javascript - 控制台上没有 'Access-Control-Allow-Origin' 错误

javascript - 如何每5秒更改多个div

javascript - 异步回调 - 放置回调函数

使用变量调用 Javascript 命名空间

javascript - 将div定位在input的右下角

javascript - 通过ajax延迟加载的问题

javascript - 使页面变暗/变暗,<div> </div> 除外

javascript - 穿透Z-index

JavaScript 检测 iOS Firefox

jquery - 使用 Ajax/JSON 的 jsTree 搜索不调用 URL