Ajax异步请求 axios

Ajax异步请求 axios

1 axios介绍

  • 原生ajax请求的代码编写太过繁琐,我们可以使用axios这个库来简化操作!

    在后续学习的Vue(前端框架)中发送异步请求,使用的就是axios.

    需要注意的是axios不是vue的插件,它可以独立使用.

    axios说明网站:(https://www.kancloud.cn/yunye/axios/234845)

  • 使用步骤
    1.引入axios核心js文件。

    在这里插入图片描述

    2.使用axios对象调用方法来发起异步请求。
    3.使用axios对象调用方法来处理响应的数据。

  • axios常用方法

    http://www.baidu.com?username=锁哥 ==》get请求

    在这里插入图片描述

    回调函数:回过头来调用的函数,回调函数都是我们负责书写,不负责调用,都是底层帮助我们调用。

    setInterval(function(){},1000);

    #备注: then函数的参数response是一个json对象,我们重点只需要了解response.data即可
    {
        // `data` 由服务器提供的响应 (重要!) response.data
        data: {},
    
        // `status` 来自服务器响应的 HTTP 状态码 response.status
        status: 200,
    
        // `statusText` 来自服务器响应的 HTTP 状态信息
        statusText: 'OK',
    
        // `headers` 服务器响应的头
        headers: {},
    
        // `config` 是为请求提供的配置信息
        config: {}
    }
                            
    
  • 代码实现

    • get请求
      • axios使用说明:
     	/*
            *  # axios的api介绍
            *  1. get(参数) 建立和服务器的连接
            *       get参数 : 是请求地址+请求参数  ---url?key=value&key=value...
            *  2. then(fn) 处理服务器响应
            *       fn(response) : 响应成功的回调函数
            *       response.data : 响应体数据
            *
            *  3. catch(fn)
            *       fn(error) : 响应失败的的回调函数
            *       error : 错误信息
            *
            *  4. finally(fn)
            *       fn : 响应结束的回调函数(无论响应成功与否,都会执行)
            * */
    整体代码,链式编程:
    // /AjaxServlet 表示后台服务器地址 url
    // name=zs&age=18 表示向后台提交的数据,get请求数据位于url后面,携带数据格式:url?key=value&key=value
    axios.get("/AjaxServlet?name=zs&age=18")
         .then(function (response) {
                // 回调函数的函数体,处理后台服务器的响应的代码,所有的数据都放到response对象中了,注意response只是一个对象标识符,名字随便定义,我们只负责编写匿名函数体代码
            })
         .catch(function (error) {
                // 回调函数的函数体,如果后台服务器出现异常就在这里处理,所有的错误信息放到error对象中
            };)
         .finally(function () {
              // 回调函数的函数体,必须执行的代码
            };);
    
    =================使用es6的箭头函数简================================================
        ()=>{}
    axios.get("/AjaxServlet?name=zs&age=18")
         .then(response=>{
                // 回调函数的函数体,处理后台服务器的响应的代码,所有的数据都放到response对象中了,注意response只是一个对象标识符,名字随便定义,我们只负责编写匿名函数体代码
            })
         .catch(error=>{
                // 回调函数的函数体,如果后台服务器出现异常就在这里处理,所有的错误信息放到error对象中
            };)
         .finally(() => {
              // 回调函数的函数体,必须执行的代码
            };);
    
    

    代码实现:

    步骤:

    1.导入axios的js库到当前项目webapp文件夹下

    2.创建html页面

    3.在html页面中导入axios的js库

    4.在html页面向后台发送axios的ajax异步请求

    5.创建Servlet,接收请求数据,处理业务逻辑和响应数据

    6.在html页面中处理服务器的响应数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>使用axios发送异步请求</title>
    </head>
    <body>
    <!--  不能在文本中书写js代码-->
    <script type="text/javascript" src="js/axios-0.18.0.js"></script>
    <script type="text/javascript">
        //1.使用axios对象调用函数向后台服务器发送ajax异步请求
        /*
            整体: axios.get().then().catch().finally();
              1)get()函数表示两后台服务器发送get请求,格式:
                  get(url?key=value&key=value...);===axios.get("/axiosDemo01Servlet?username=锁哥&password=1234")
              2)then() 处理后台服务器响应的,格式:
                    then(function(接收响应数据的对象名){
                        处理响应的代码
                    });
    
                    then(function (resp){
                     console.log(resp);
                 })
                 后台响应数据:
                    resp={
                            data: 'axios实现ajax异步get请求,username=锁哥',
                            status: 200,
                            statusText: '',
                            headers: {…},
                            config: {…},
                        }
    
                    resp.data就可以获取 数据: axios实现ajax异步get请求,username=锁哥
    
              3)catch() :处理异常
                    catch(function (error) {
                        console.log(error);
                    })
    
                    let person ={
                        username:"锁哥",
                        age:18
                    }
            小结:
              1.get函数:建立和服务器的连接,在参数中书写连接服务器的url和请求参数
              2.then函数:书写处理响应数据的,在该函数的参数位置书写回调函数
              3.catch函数:书写处理响应错误信息数据的,在该函数的参数位置书写回调函数
              4.finally函数:无论响应成功还是失败都要执行的代码,在该函数的参数位置书写回调函数
         */
        axios.get("http://localhost:8080/axiosDemo01Servlet?username=锁哥&password=1234")
             .then(function (response) {
                 //处理响应数据的回调函数体代码,response表示接受服务器响应数据的对象,该对象中具有重要属性是data
                console.log(response);
                console.log(response.data);
              })
            .catch(function (error) {
                //书写处理响应错误信息数据的,在该函数的参数位置书写回调函数
                console.log(error);
             })
            .finally(function () {
                 //无论响应成功还是失败都要执行的代码,在该函数的参数位置书写回调函数
                 console.log('我是必须执行的...');
             });
    </script>
    </body>
    </html>
    

在这里插入图片描述

【后台代码,先不用理会,后面会讲解】

# 说明:对于后台代码我们不用理会,但是我们需要启动后台,如果不启动后台,前端是无法访问后台的。前端这几天启动后台基本都是一样的方式,如下:
  • 1.找到课后资料中的目录: day03-AJAX&Vue\02_代码\授课素材\01_ajax素材\异步\后端
  • 2.在上述目录下输入cmd命令打开dos窗口

在这里插入图片描述

  • 3.在dos窗口中输入jdk命令来启动项目:
java -jar day0302_ajax.jar
ps:使用java命令运行jar包:java -jar 项目的jar包

说明:1)java -jar 属于java中命令,执行jar包的 2)day0302_ajax.jar 是上述目录中后台项目的jar包

在这里插入图片描述

  • 停止后台项目运行:ctrl+c
package com.itheima.sh.a_axios_01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/axiosDemo01Servlet")
public class AxiosDemo01Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取请求数据
        // axios.get("/axiosDemo01Servlet?username=锁哥&password=1234")
        //.getParameter("username"); 函数的参数username是前端get函数中url后面参数的key
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //2.输出
        System.out.println(username+"---"+password);
        //模拟异常:
//        int i = 1 / 0;
        //3.响应数据给前端
        response.getWriter().print("axios实现ajax异步get请求,username="+username);
    }
}

小结:

1.使用axios发送ajax的异步请求:

1.导入axios的js库
<script type="text/javascript" src="js/axios-0.18.0.js"></script>
2.使用axios对象调用方法进行发送请求和处理响应数据:
axios.get("url?key=value&key=value").then(function(response){
    //处理响应代码
}).catch(function(error){
    //处理响应代码,错误信息
}).finally(function(){
    //必须执行的
});
  • post请求
    • axios使用说明:
 	/*
        *  1. post(url,param)
        *       url : 请求地址(不能包含请求参数)
        *       param : 请求参数(走请求体) key=value&key=value... 如果不携带参数那么书写: axios.post(url).then()...
        *
        *  2. 箭头函数 (相当于java中的lambda表达式)
        *       es6的新语法 !!!
        *       //普通函数
        *       function(response){

                    console.log(response.data) // 响应体数据
                }
                //箭头函数 :(参数名,参数名,...) => {函数体}
                //如果参数只有一个那么可以省略小括号
                response => {
                    console.log(response.data)
                }
           注意:考虑后期学习的vue框架我们建议都使用箭头函数。

        * */
整体代码,链式编程:
  axios.post(url, param)
       .then(response => {
            // 回调函数的函数体,后台响应成功执行then函数
        })
       .catch(error => {
           // 回调函数的函数体
        })
       .finally(() => {
            // 回调函数的函数体
        });

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用axios发送异步请求</title>
</head>
<body>
<!--  不能再文本中书写js代码-->
<script type="text/javascript" src="js/axios-0.18.0.js"></script>
<script type="text/javascript">
    //1.使用axios对象调用函数向后台服务器发送ajax异步请求
    /*
        整体: axios.post().then().catch().finally();
          1)post()函数表示向后台服务器发送post请求,格式:
              post(url,key=value&key=value...);===axios.post("/axiosDemo01Servlet","username=锁哥&password=1234")
          2)then() 处理后台服务器响应的,格式:
                then(function(接收响应数据的对象名){
                    处理响应的代码
                });
            其实在then函数中的回调函数我们可以使用es6的新语法,箭头函数:
                (参数)=>{函数体}
            格式:
            then(resp=>{
                    函数体
            });
     */
    /*
             说明:
                1.http://localhost:8080/axiosDemo03Servlet 表示后台服务器地址
                2.username=锁哥&password=1234:表示向后台携带的参数
    */
    //使用es6的箭头函数简化上述回调函数的写法
    axios.post("http://localhost:8080/axiosDemo03Servlet","username=锁哥&password=1234")
         .then(response=>{
            console.log(response.data);
            })
         .finally(()=>{
                console.log('必须执行的');
            });

</script>
</body>
</html>
  • java代码【后台代码,先不用理会,后面会讲解】
package com.itheima.sh.a_axios_01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/axiosDemo03Servlet")
public class AxiosDemo03Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取请求数据
        //  axios.post("/axiosDemo02Servlet","username=锁哥&password=1234")
        //.getParameter("username"); 函数的参数username是前端post函数中url后面参数的key

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //2.输出
        System.out.println(username+"---"+password);
        //3.响应数据
        response.getWriter().print("axios实现ajax异步post请求,username="+username);
    }
}

小结:

1.如果使用的是axios的post请求,那么必须在post函数中将url和请求参数分开书写:

axios.post("http://localhost:8080/axiosDemo03Servlet", "username=锁哥&password=1234")

2.我们对于需要使用回调函数的位置可以使用es6的箭头函数简化代码书写:

  axios.post("/axiosPostServlet", "username=锁哥&password=1234")
        .then(response=>{//response属于标识符,随便定义
            console.log(response.data);
        })
        .finally(()=>{
            console.log('必须执行的');
        });

3.箭头函数体省略书写,思想和java中lambda省略思想是一样的:

 axios.post("/axiosPostServlet", "username=锁哥&password=1234")
        .then(response=>console.log(response.data))
        .finally(()=>{
            console.log('必须执行的');
        });

2 练习:检查用户名是否已被注册

在这里插入图片描述

【1】需求

#需求: 
	   a. 有一个注册的表单, 有注册用户名和密码,一个提交按钮
	   b. 用户名输完之后,检测这个用户名是否可用
	   c. 就算服务器没有立即响应, 用户还能继续在表单上操作 -> 异步

	   

【2】分析

#分析:
	1. 用户名输入框注册一个失去焦点事件(onblur)
	2. 向服务器发送 异步 请求
	3. 服务器响应之后, 提示信息 局部更新到页面上

【3】html代码

 /*
    *   需求: 查看此用户名是否已注册
    *   分析:
    *       1. 前提: 注册的用户存到数据库中了
    *       2. 判断: 数据库中是否有这个用户名
    *           1). 如果有, 提示已被注册不可用
    *           2). 如果没有, 提示可用
    *
    *   前端: 发起请求
    *       事件: onblur
    *       1). 请求的类型: 异步 (不跳转而且只要页面局部更新)
    *       2). axios
    *           a. 请求地址
    *           b .请求参数
    *
    *   后端: 接收请求,业务处理,响应数据
    *       1). 获取请求参数
    *       2). 查询数据库
    *       3). 根据结果响应
    *
    *   前端: 接收响应, 显示数据
    *
    * */

【4】步骤

#前端
1.创建一个html页面,书写html标签
2.在html页面中导入axios的js库
3.使用js获取用户名输入框的标签对象并给其绑定一个离焦事件onblur
4.在离焦事件绑定的匿名函数体中获取页面输入的用户名
5.使用axios向后台发送异步请求并携带用户名数据到后台服务器
6.在axios的回调函数中处理后台响应的数据
7.根据响应的结果进行判断
8.用户名存在,不能注册,提示用户名已经存在
9.用户名不存在,可以注册,提示可以注册

#后台
1.创建注册的servlet
2.处理请求乱码
3.获取页面提交的请求参数
4.模拟数据库判断获取的数据是否存在
5.响应数据给前端页面

【5】代码实现

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="">
    <input type="text" name="username" placeholder="请输入用户名" id="username">
    <span id="usernameSpan"></span>
    <br>
    <input type="password" name="password" placeholder="请输入密码"> <br>
    <button>提交</button>
</form>
</body>

</html>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="">
    <input type="text" name="username" placeholder="请输入用户名" id="username">
    <span id="usernameSpan"></span>
    <br>
    <input type="password" name="password" placeholder="请输入密码"> <br>
    <button>提交</button>
</form>
<!--  导入axios类库  -->
<script type="text/javascript" src="js/axios-0.18.0.js"></script>
<script type="text/javascript">
    /*
        说明:
            1.后台地址url:"http://localhost:8080/registerServlet"
            2.后台需要根据key即参数名是username来获取前端提交的用户名数据
     */

       //3.使用js获取用户名输入框的标签对象并给其绑定一个离焦事件onblur
    document.getElementById('username').onblur = function () {
        //4.在离焦事件绑定的匿名函数体中获取页面输入的用户名
        let username = this.value;
        //5.使用axios向后台发送异步请求并携带用户名数据到后台服务器
        //"username="+username 等号左边的username需要后台根据该username获取页面输入的值,等号右边的username是上述保存用户名的变量
        axios.post("http://localhost:8080/registerServlet","username="+username)
             .then(resp=>{
                 // 6.在axios的回调函数中处理后台响应的数据
                 let result = resp.data;
                 //7.根据响应的结果进行判断
                 if(result == false){
                    //8.用户名存在,不能注册,提示用户名已经存在
                     document.getElementById('usernameSpan').innerHTML="<font color='red'>用户名存在,重新输入</font>"
                 }else {
                    //9.用户名不存在,可以注册,提示可以注册
                     document.getElementById('usernameSpan').innerHTML="<font color='green'>注册成功</font>"
                 }
             });


    };

</script>
</body>
</html>

servlet代码【后台代码,先不用理会,后面会讲解】

package com.itheima.sh.a_axios_01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取请求参数
        //后台如何获取usernameValue的值:request.getParameter("username");
        String username = request.getParameter("username");
        //2.将获取的name值传递到service层,这里我们暂时不写了,判断
        if("岩岩".equals(username)){
            //响应数据,说明用户名存在,不能注册
            response.getWriter().print(false);
        }else{
            //响应数据,说明用户名不存在,能注册
            response.getWriter().print(true);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/767202.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】04.双向链表

一、双向链表的结构 注意&#xff1a;这里的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;带头链表里的头节点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位节点不存储任何有效元素&#xff0c;只是站在这里“放哨的”。 “哨兵位”存在的意义&#xff1a;遍历循…

揭秘,PyArmor库让你的Python代码更安全

PyArmor 概述: PyArmor 是一个用于加密和保护 Python 源代码的工具,旨在防止代码被逆向工程和未经授权的使用.通过将 Python 源代码编译为加密的字节码,PyArmor 提供了一种有效的方法来保护知识产权和敏感算法. 安装 pip install pyarmor安装完成后,可以通过以下命令验证安装…

LLM端侧部署系列 | 手机上运行47B大模型?上交推理框架PowerInfer-2助力AI手机端侧部署

0. 引言 黄梅时节家家雨&#xff0c;青草池塘处处蛙。 有约不来过夜半&#xff0c;闲敲棋子落灯花。 当下&#xff0c;在移动设备上部署大型模型的趋势是愈演愈烈。Google推出了AI Core&#xff0c;使得Gemini Nano可以在智能手机上部署。此外&#xff0c;近期传闻苹果在iOS …

SQL语句(DQL)

Data Query Language&#xff08;数据查询语言&#xff09;&#xff0c;用来查询数据库中表的记录 DQL-基本查询 DQL-条件查询&#xff08;WHERE&#xff09; -- 查询姓名为2个字的员工信息 select * from emp where name like __;-- 查询身份证号最后一位是X的员工信息 selec…

uni-app打包小程序的一些趣事~

前言 Huilderx版本&#xff1a;4.15 uni-app Web端版本&#xff1a;3.4.21 问题1 Web端/APP端样式好好的&#xff0c;打包微信小程序就乱了咋整&#xff1f; 使用::v-deep/::deep/deep(){}都是没用滴~~ 原因&#xff1f; 解决&#xff1a; <script lang"ts"…

c语言回顾-数组(全网最详细,哈哈哈)

目录 前言&#xff0c;和小编一起感受数组的魅力&#xff01;&#xff01;&#xff01; 1.数组的概念 2.一维数组的创建和初始化 2.1数组创建 2.2数组的初始化 2.3数组的类型 3.一维数组的使用 3.1数组下标 3.2数组元素的输入输出 小结&#xff1a; 4.一维数组在内存…

Python中的__init__方法:为何它如此重要

目录 一、__init__方法的基本概念 1.1 定义与作用 1.2 调用时机 1.3 参数传递 二、__init__方法的工作原理 2.1 初始化属性 2.2 执行其他操作 2.3 继承与多态 三、__init__方法的使用技巧 3.1 参数传递与默认值 3.2 链式初始化 3.3 继承与超类初始化 3.4 初始化方…

常见锁策略之可重入锁VS不可重入锁

可重入锁VS不可重入锁 有一个线程,针对同一把锁,连续加锁两次,如果产生了死锁,那就是不可重入锁,如果没有产生死锁,那就是可重入锁. 死锁 我们之前引入多线程的时候不是讲了一个加数字的案例么,我们今天以它来举例 当我们这样写的时候会出现什么问题? 分析:第一个synchron…

Zookeeper:Zookeeper集群角色

文章目录 一、Leader选举二、Zookeeper集群角色 一、Leader选举 Serverid&#xff1a;服务器ID&#xff1b;比如有三台服务器&#xff0c;编号越大在选择算法中的权重越大。Zxid&#xff1a;数据ID&#xff1b;服务器中存放的最大数据ID&#xff0c;值越大说明数据越新&#x…

【创作纪念日】我的CSDN1024创作纪念

机缘 注册CSDN是很长时间了&#xff0c;但是上学时因为专业是电气工程&#xff0c;与编程打交道比较少&#xff0c;一直都是寻求帮助&#xff0c;而非内容输出。直到考研后专业改变&#xff0c;成为了主要跟软件编程、计算机知识相关的研究后&#xff0c;才逐步开启自己的CSDN…

模拟布局:为什么井、抽头和保护环至关重要

其中的关键示例是井、抽头和保护环。这些结构对于任何 MOSFET 电路的工作都至关重要。 这就是为什么了解衬底在 MOSFET 电路中的作用对于创建有效的模拟设计至关重要。要做到这一点&#xff0c;首先必须了解 MOSFET 晶体管的工作原理。 让我们来看看一种类型的 MOSFET&#x…

归并排序-MergeSort (C语言详解)

目录 前言归并排序的思想归并排序的递归法归并排序的非递归法归并排序的时间复杂度与适用场景总结 前言 好久不见, 前面我们了解到了快速排序, 那么本篇旨在介绍另外一种排序, 它和快速排序的思想雷同, 但又有区别, 这就是归并排序, 如下图, 我们对比快速排序与归并排序. 本…

编译器的控制流图分析

1&#xff0c;建立感性认识 1.1 源码 hello.c int x 10; int y 11; int main(){int z 12;for (int i 0;i < 10;i){z * x * y;}if(z>7.0)z1.0f;elsez 2.0f;return 0; }1.2 编译 2005 sudo apt-get install -y graphviz-doc libgraphviz-dev graphviz2034 ../ex_…

Java学习高级一

修饰符 static 类变量的应用场景 成员方法的分类 成员变量的执行原理 成员方法的执行原理 Java之 main 方法 类方法的常见应用场景 代码块 设计模式 单例设计模式 饿汉式单例设计模式 懒汉式单例设计模式 继承 权限修饰符

LeetCode题练习与总结:二叉树的后序遍历--145

一、题目描述 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a…

以太坊DApp交易量激增83%的背后原因解析

引言 最近&#xff0c;以太坊网络上的去中心化应用程序&#xff08;DApp&#xff09;交易量激增83%&#xff0c;引发了广泛关注和讨论。尽管交易费用高达2.4美元&#xff0c;但以太坊仍在DApp交易量方面遥遥领先于其他区块链网络。本文将深入探讨导致这一现象的主要原因&#…

颅内感染性疾病患者就诊指南

颅内感染性疾病&#xff0c;即病原体侵入中枢神经系统&#xff0c;导致脑部或脑膜发生炎症的疾病。这些病原体可能是细菌、病毒、真菌或寄生虫等。颅内感染不仅会对脑组织造成损害&#xff0c;还可能引发一系列严重的并发症&#xff0c;如癫痫发作、意识障碍等 颅内感染性疾病的…

国产软件号称Windows系统的天花板,却被误认为是外国佬研发

说起国产软件&#xff0c;大家总是容易给它们贴上“流氓、捆绑、满满的都是套路”这样的标签。 其实挺冤枉的&#xff0c;有些软件真的挺好用&#xff0c;也挺良心的&#xff0c;但就是因为这些刻板印象&#xff0c;老是被误以为是外国工程师搞出来的。 VeryCapture 之前小编…

JavaScript之深入对象,详细讲讲构造函数与常见内置构造函数

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家详细讲讲构造函数与常见内置构造函数&#xff0c;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;原创不易&#xff0c;如果能帮助到带大家&#xff0c;欢迎…

达梦数据库的系统视图v$deadlock_history

达梦数据库的系统视图v$deadlock_history 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$DEADLOCK_HISTORY 视图记录了数据库中发生的死锁信息。通过查询这个视图&#xff0c;数据库管理员可以监控和诊断数据库中的死锁问题&#xff0c;从而采取相应的措施…