关于用户刷新页面或直接关闭页面、浏览器时向后台发送请求的解决方案

用户退出登录时需要修改数据库的登录状态。画面上给了用户“登出”按钮,用于退出登录,跳转至登录画面,这样可以及时向后台发送请求,来修改数据库的登录状态。虽如此,有的用户还是习惯于直接关闭画面,或者浏览器,这个时候原来用axios向后台发送登出请求的方式就行不通了。于是乎,只能换别的招了,残念!最终调查总结出两种方法,亲测有效,就做此记录。

1、jquery

引入jQuery,使用ajax发送同步请求,代码如下:

window.onbeforeunload = () => {
    $.ajax({
      type: "POST",
      data: { name: "hyuga hinata" },
      url: "http://localhost:8080/closeTab",
      async: false
    });
};

其中onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发。

2、原生js

如非必要,可以不用引入jquery,使用原生js发送请求也是可以的,代码如下:

window.onbeforeunload = () => {
    var xmlhttp = new XMLHttpRequest(); // 创建异步请求
    // xmlhttp.onreadystatechange = () => {
    //   status == 200 用来判断当前HTTP请求完成
    //   if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    //   console.log(xmlhttp.responseText);
    //   }
    };
    let data = new FormData();
    data.append("name", "hyuga hinata")
    xmlhttp.open("POST", "http://localhost:8080/closeTab", false); // 使用POST方法
    xmlhttp.send(data); // 发送同步请求
};

 因为关闭画面不需要对返回数据再做处理,上面的onreadystatechange 事件就注释掉了。

 测试结果截图

关于用户刷新页面或直接关闭页面、浏览器时向后台发送请求的解决方案_第1张图片

万岁!!!请求发送成功了。

两种方法的关键在于都是发送的同步请求,不能发送异步请求。所以当初使用axois不能满足需求。

好了,做好记录!

你可能感兴趣的:(Vue)