2022-9-1 异步请求

异步请求

ajax:异步刷新(局部刷新),前端技术。给后台发请求。
异步:整个页面不会全部刷新,只有某个局部在刷新。
验证用户名是否存在。
刷新:

1.原生js的ajax

get 请求

(1)步骤:

① 创建 ajax对象 ( xhr 对象 );
② 创建请求 ( 调用 xhr.open() 函数 );
③ 发送请求 ( 调用 xhr.send() 函数 );
④ 监听 xhr.onreadystatechange 事件 ( 监听状态,接收响应 )。

    // 1. 创建ajax对象(异步对象)
    let xhr = new XMLHttpRequest();
    // 2. 创建请求
    // xhr.open('请求方法','url地址','是否采用异步处理去访问接口true/false')
    xhr.open("GET", "xxx",true);
    // 3. 发送请求
    xhr.send();
    // 4. 监听状态,接收响应
    xhr.onreadystatechange = function() {
        // 4.1 监听 xhr 对象的请求状态 readyState ;与服务器响应的状态 status
        if (xhr.readyState === 4&& xhr.status === 200) {
            // 4.2 使用xhr.response 获取服务器返回的数据
            console.log(xhr.response);
        }
    };

post 请求

(1)步骤:

① 创建 ajax对象 ( xhr 对象 );
② 创建请求 ( 调用 xhr.open() 函数 );
设置 Content-Type 属性(固定写法);
④ 发送请求 ( 调用 xhr.send() 函数 ), 同时指定要发送的数据
⑤ 监听 xhr.onreadystatechange 事件 ( 监听状态,接收响应 )。

    // 1. 创建对象
    let xhr = new XMLHttpRequest();
    // 2. 创建请求
    xhr.open("POST", "xxxx");
    // 3. 设置 Content-Type 属性(固定写法)
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    // 4. 发送请求,同时将数据以查询字符串的形式,提交给服务器
    xhr.send('username='+ username);
    // 5. 监听 onreadystatechange 事件,接收响应数据
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200)
            console.log(xhr.response);
        }
    }

2.jquery

先要引入依赖

// 1.发送get请求
// $.get("valid.do?username=" + username,function(data) {
//     // data就是后台回来的响应体
//     console.log(data);
//     if(data == "1") {
//         $("#msg").html("用户名可用...")
//     }
//     if(data == "0") {
//         $("#msg").html("用户名已存在...")
//     }
// });
// 2.发送post请求
// $.post("valid.do","username=" + username,function (data) {
//     if(data == "1") {
//         $("#msg").html("用户名可用...")
//     }
//     if(data == "0") {
//         $("#msg").html("用户名已存在...")
//     }
// });
// formData构建一个表单数据对象
// formData是JS的内置对象,和JQuery无关,和Vue无关
let formData = new FormData();
formData.append("username",username);
formData.append("password",password);

// 发送ajax请求
// 3.完整写法
$.ajax({
    url: "valid.do",
    type: "post",
    data: formData,
    success : function(res) {
        console.log(res);
    },
    error : function(res) {
        console.log(res);
    }
});

3. Axios (ajax i/o system):

这不是一种新技术,本质上还是对原生XMLHttpRequest的封装,可用于浏览器和nodejs的HTTP客户端,只不过它是基于Promise的,符合最新的ES规范。具备以下特点:

  • 在浏览器中创建XMLHttpRequest请求
  • 在node.js中发送http请求
  • 支持Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消要求
  • 自动转换JSON数据
  • 客户端支持防止CSRF/XSRF(跨域请求伪造)

方法一:

 //请求格式类似于 http://localhost:8080/goods.json?id=1
this.$axios.get('/goods.json',{
                params: {
                    id:1
                }
            }).then(res=>{
                    console.log(res.data);
                },err=>{
                    console.log(err);
            })

方法二:

this.$axios({
        method: 'get',
        url: '/goods.json',
        params: {
            id:1
        }
    }).then(res=>{
        console.log(res.data);
    },err=>{
        console.log(err);
    })

post请求一般分为两种类型

  1. form-data 表单提交,图片上传、文件上传时用该类型比较多

  2. application/json 一般是用于 ajax 异步请求

方法一:

this.$axios.post('/url',{
                id:1
            }).then(res=>{
                console.log(res.data);
            },err=>{
                console.log(err);
            })

方法二:

$axios({
    method: 'post',
    url: '/url',
    data: {
        id:1
    }
}).then(res=>{
    console.log(res.data);
},err=>{
    console.log(err);
})

方法三:

let data = {
    //请求参数
}

let formdata = new FormData();
for(let key in data){
    formdata.append(key,data[key]);
}

this.$axios.post('/goods.json',formdata).then(res=>{
    console.log(res.data);
},err=>{
    console.log(err);
})
4种发请求的方式:
1、地址栏
2、a标签
3、form表单
4、location.href或window.open()
注意点1:
使用ajax发送请求,页面是不可以通过后台跳转!!!
如果需要跳页面,也是通过我们前端的JS来跳转,不可能通过servlet跳转

注意点2:
ajax和form表单不能同时使用。
ajax:不跳页面。
form:一定跳走的
请求体:post请求才有请求体。

ajax发起请求,后台给出的响应会回到ajax的响应处理函数中。
readyState:
0:      xhr被创建成功,open方法未调用
1:      open被调用,建立的连接
2:      send被调用,可以获取状态行和响应头
3:      可以拿到响应体,响应体加载中
4:      响应体下载完成,可以直接使用responseText。
         代表请求可以正常发送,响应能够正常接收。
axios发送get请求,
*   请求中如果有参数,还是一个默认的以文档里的形式发送,和之前的任何一种请求方式没有任何区别。
* axios发送post请求,
*   请求中如果有参数,会把post请求的请求体转成json串,然后再发给后台。

Original: https://www.cnblogs.com/ychptz/p/16647803.html
Author: 阿萨德菩提子
Title: 2022-9-1 异步请求

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611137/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • mysql8使用tmpfs内存磁盘当内存数据库的配置方法

    内存关系数据库没有找到开源好用的,很多都是商用。虽然mysql有memory引擎,但写是整体锁表,没法用。 一直想将mysql放入内存中,搜索n次资料,没找到合适的,可能之前思路不…

    数据库 2023年5月24日
    0105
  • sqlserver 分列

    sql server 数据库中某张表(Person)的数据信息是: Address 1 平山花园-4单元-12幢-203 2 香山花园-3单元-22幢-304 现在有需求是,将地址…

    数据库 2023年6月11日
    080
  • 设计模式之(9)——适配器模式

    定义:适配器模式是将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作,在软件设计中我们需要将一些”现存的对象&#8…

    数据库 2023年6月14日
    047
  • MySQL8.0 redo日志系统优化

    现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复。redo日志是物理日志,一般采用WAL(Write-Ahead…

    数据库 2023年6月9日
    096
  • ElasticSearch详解

    什么是ElasticSearch ElasticSearch是一款非常强大的、基于Lucene的开源搜素及分析引擎;它是一个实时的分布式搜索分析引擎。它通常被用作全文检索、结构化搜…

    数据库 2023年6月6日
    096
  • 2022-9-2 cookie 和 session

    当客户端关闭后,服务器不关闭,两次获取session是否为同一个?默认情况下。不是。 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cooki…

    数据库 2023年6月14日
    096
  • 0811JDBC随笔

    1.JDBC体系系统 一组规范:接口 JDBC接口(API)包括两个层次: 面向应用的API:Java API,抽象接口,供应用开发人员使用(连接数据库,执行SQL语句,获得结果)…

    数据库 2023年6月14日
    086
  • MYSQL基础学习笔记

    关系型数据库与非关系型数据库 1、关系型数据库(SQL):主要依据”一对一、一对多、多对多”等关系模型来创建的数据库。 2、非关系型数据库(NoSQL):主…

    数据库 2023年5月24日
    076
  • SQL 版本号排序

    SQL 语句直接对内容为版本号格式的字段进行排序时,排序效果通常不是最终想要的效果,因为最终需要的效果,是需对版本号里的每一段(通常以小数点分隔)按数值进行排序。 解决这个问题,主…

    数据库 2023年5月24日
    074
  • [LeetCode]28. 实现 strStr()

    实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始…

    数据库 2023年6月9日
    088
  • 初识HTML5

    HTML5的学习笔记(随便总结,个人使用) 一、认识HTML5的基本格式 1、 标记 标记位于文档的最前端,用于向浏览器说明当前文档使用的是那种HTML标准规范。只有在开头处使用 …

    数据库 2023年6月11日
    078
  • leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(中等)

    一、题目大意 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节…

    数据库 2023年6月16日
    0106
  • SpringBoot快速入门

    虽然我的工作中更多的是与数据库打交道,但是作为一个 Coder,我觉得掌握前后端的 Web技术来说是非常有必要的。 不仅可以帮助我们在工作中更好的理解其他岗位与你对接的人他的工作痛…

    数据库 2023年6月11日
    071
  • django-nginx与uwsgi项目部署

    uwsgi是提供动态服务的 nginx反向代理 在项目中创建一个settings.py的副本。我这里重命名为copy_settings.py,将配置文件中的DEBUG=False …

    数据库 2023年6月6日
    0101
  • GROUP BY 后获取每一组最新的一条记录

    最近有一种需求,一张订单可能有多个支付单,这就要求我们拿到每一张订单的最新支付单。具体思路如下: [En] Recently, there is a demand that the…

    数据库 2023年5月24日
    071
  • JDBC概述

    JDBC概述 JDBC(Java DataBase Connectivity),它是一种用于执行 SQL语句的 JavaAPI。通过使用JDBC就可以使用 相同的API访问 不同的…

    数据库 2023年6月16日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球