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

本文主要是介绍关于用户刷新页面或直接关闭页面、浏览器时向后台发送请求的解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用户退出登录时需要修改数据库的登录状态。画面上给了用户“登出”按钮,用于退出登录,跳转至登录画面,这样可以及时向后台发送请求,来修改数据库的登录状态。虽如此,有的用户还是习惯于直接关闭画面,或者浏览器,这个时候原来用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 事件就注释掉了。

 测试结果截图

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

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

这篇关于关于用户刷新页面或直接关闭页面、浏览器时向后台发送请求的解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133018

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送