【学习笔记76】认识ajax和ajax的请求

news2024/11/24 14:25:13

一、认识前后端交互

1、前后端交互

  • 前端向后端发送请求, 索要数据
  • 因为前端没有办法存储大量数据, 所以数据都存储在后端
  • 当前端需要数据时, 需要向后端发送请求, 得到想要的数据

2、什么是ajax

  • ajax全名async javascript and XML(异步JavaScript和XML)
  • 前后台交互的能⼒,也就是我们客户端给服务端发送消息的⼯具,以及接受响应的⼯具
  • ajax不是新的编程语言,而是一种使用现有标准的新方法。
  • AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下
  • 是⼀个 默认异步执⾏机制的功能,AJAX分为同步(async = false)和异步(async = true)

3、简单实现一个ajax请求

        // 1. 创建ajax
        const xhr = new XMLHttpRequest();

        // 2. 向ajax配置数据
        // xhr.open('参数一 ', '参数二', '参数三')
        // 参数一:请求的方式, 看接口文档
        // 参数二:请求的地址, 看接口文档
        // 参数三:配置当前请求是否为异步, 默认是true也就是异步
        xhr.open('GET', 'http://localhost:8888/test/first', true);

        // 3. 发送请求
        xhr.send();

        // 4. 接收响应
        xhr.onload = function () {
            console.log('接收到服务端的响应了');
            console.log(xhr.responseText);
        }

二、ajax异步书写的问题

  1. 创建 ajax (同步代码)
  2. 配置信息 (同步代码)
  3. 发送请求 (同步发送, 异步接收)
  4. 接收到 服务端的响应 (同步代码)

(一)异步代码的书写

1、 异步 (1 2 3 4

  1. 创建
  2. 配置信息, 其中接收配置的是异步的
  3. 同步发送请求, 但是接收是异步(在接受前就会执行后续的同步代码)
  4. 配置接收到后的响应
  5. 接收到服务端的响应
   		// 1. 创建 ajax     (同步代码)
        const xhr = new XMLHttpRequest()
        // 2. 配置信息      (同步代码)
        xhr.open('GET', 'http://localhost:8888/test/first', true)
        // 3. 发送请求      (同步发送, 异步接收)
        xhr.send()
        // 4. 接收到 服务端的响应   (同步代码)
        xhr.onload = function () {
            console.log(xhr.responseText)
        }

在这里插入图片描述

2、异步(1 2 4 3

  1. 创建
  2. 配置信息, 其中将接收配置为异步的
  3. 书写接收到服务器的相应的代码
  4. 发送请求
  5. 得到响应, 触发 onload 事件
        // 1. 创建 ajax     (同步代码)
        const xhr = new XMLHttpRequest()
        // 2. 配置信息      (同步代码)
        xhr.open('GET', 'http://localhost:8888/test/first', true)
        // 4. 接收到 服务端的响应   (同步代码)
        xhr.onload = function () {
            console.log(xhr.responseText)
        }
        // 3. 发送请求      (同步发送, 异步接收)
        xhr.send()

在这里插入图片描述

  • 异步代码按照 1 2 3 4,还是 1 2 4 3 都可以

(二)同步代码的书写

1、 同步 (1 2 3 4

  1. 创建
  2. 配置信息 这里边将 接收 配置为 同步的
  3. 书写 接收到 服务端响应的 代码 onload
  4. 发送请求
  5. 得到服务端的响应
        // 1. 创建 ajax     (同步代码)
        const xhr = new XMLHttpRequest()
        // 2. 配置信息      (同步代码)
        xhr.open('GET', 'http://localhost:8888/test/first', false)
        // 4. 接收到 服务端的响应   (同步代码)
        xhr.onload = function () {
            console.log(xhr.responseText)
        }
        // 3. 发送请求      (同步发送, 异步接收)
        xhr.send()

在这里插入图片描述

2、同步(1 2 4 3

  1. 创建
  2. 配置信息, 第三个参数将 接收配置同步代码
  3. 发送请求 (同步发送, 同步接受)
    • 接收会触发 onload
    • 但是此时没有 onload 事件
  4. 配置 onload
    • 但是此时服务端不会再有回馈,也就是说, onload 后续不会执行
        // 1. 创建 ajax     (同步代码)
        const xhr = new XMLHttpRequest()
        // 2. 配置信息      (同步代码)
        xhr.open('GET', 'http://localhost:8888/test/first', false)
        // 3. 发送请求      (同步发送, 异步接收)
        xhr.send()
        // 4. 接收到 服务端的响应   (同步代码)
        xhr.onload = function () {
            console.log(xhr.responseText)
        }
  • 同步代码必须按照 1 2 4 3 的流程,按照1 2 4 3书写,返回来的是空

三、ajax的状态码

         0: 表明ajax刚刚创建成功
         1: 表明ajax刚刚配置成功
         2: 表明ajax发送成功(还没接收到响应)
         3: 表明服务端接收请求, 并反馈给我们一个响应, 此时浏览器正在解读响应的内容
         4: 表明服务端接收请求,并返回一个响应, 且浏览器解读完成
        // 1. 创建 ajax
        const xhr = new XMLHttpRequest()
        // console.log(xhr.readyState)  // 打印0

        // 2. 配置信息      (同步代码)
        xhr.open('GET', 'http://localhost:8888/test/first')

        xhr.onreadystatechange = function () {
            console.log(xhr.readyState)
        }
        // 3. 发送请求      (同步发送, 异步接收)
        xhr.send()
        // console.log(xhr.readyState)  // 打印1

在这里插入图片描述

        // 1. 创建 ajax
        const xhr = new XMLHttpRequest()

        // 2. 配置信息      (同步代码)
        xhr.open('GET', 'http://localhost:8888/test/first')

        xhr.onreadystatechange = function () {
            // console.log(xhr.readyState)
            if (xhr.readyState === 2) {
                // ajax 请求成功, 但还没有响应
                console.log(xhr.responseText)
            }
            if (xhr.readyState === 3) {
                // 响应回来了, 但浏览器还在解读
                console.log(xhr.responseText)
            }
            if (xhr.readyState === 4) {
                // 响应回来了, 解读也完成
                console.log(xhr.responseText)
            }
        }

        // 3. 发送请求      (同步发送, 异步接收)
        xhr.send()

四、http(s) 传输协议(了解)

  • http(s) 规定了请求只能由前端发起, 到后端
  • 再传输过程中, 如果我们有参数, 必须是字符串类型的查询字符串

1. 建立连接

浏览器和服务端建立连接

2. 发送请求

  • 前端的数据都是以请求报文头的形式传递给后端
  • 浏览器帮我们完成

3. 返回响应

  • 后端的数据都是响应报文头的形式传递给前端
  • 响应状态码

4. 断开连接

  • 浏览器和服务端断开连接

5、响应状态码

	100~199     程序连接还在继续中
	200~299     响应成功    (200)
	300~399     连接重定向  (300 301 304)
	400~499     代表客户端错误  (401 403 404)  一般这种都是前端出现问题, 如果确保自己没问题, 让后端检查
	500~599     代表服务端错误  (500 501)   代表 后端出问题

五、ajax 请求方式的区别

(一)ajax 请求方式 (了解)

  • 发get: 偏向获取的意思
  • delete: 偏向获取的意思 (删除)
  • post: 偏向于提交的意思
  • put: 偏向于提交的意思(修改)
  • 常用的就只有get和post

(二)get和post的一个区别

1. 参数携带的位置

  • get:将参数拼接到路径后, 参数和路径之间使用问号分隔
    • 'http://localhost:8888/test/first?key=value&key2=value2
  • post:需要将参数请求体内书写 (xhr.send() 小括号内部书写)

2. 参数大小

  • get:2kb 左右
  • post:原则上没有限制, 服务端可以限制参数大小

3. 参数格式

  • get:正常写一个 查询字符串 (key=value&key2=value2)
  • post:再传参时, 需要再 请求头内设置 content-type

4. 安全性(相对安全)

  • get:明文传输, 相对不安全
  • post:密文传输, 相对安全

六、测试请求

1、get参数的测试

        let text1 = 'QF666'
        let text2 = 18
        // 1. 创建一个 ajax
        const xhr = new XMLHttpRequest()
        // 2. 配置 ajax 信息
        xhr.open('GET', `http://localhost:8888/test/third?name=${text1}&age=${text2}`)
        xhr.onload = function () {
            const res = JSON.parse(xhr.responseText)
            console.log(res)
        }
        xhr.send()

在这里插入图片描述

2、post参数的测试

  • 如果是 post 请求, 传参时应该写在send小括号内部, 还需要配置一下content-type
  • 查询字符串:content-type 配置 application/x-www-form-urlencoded
  • JSON 字符串:content-type配置为application/json
        let text1 = 'QF666';
        let text2 = 999;
        const xhr = new XMLHttpRequest();
        xhr.open('POST', `http://localhost:8888/test/fourth`);
        xhr.onload = function () {
            const res = JSON.parse(xhr.responseText);
            console.log(res);
        }

        xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
        xhr.send(`name=${text1}&age=${text2}`);

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手摸手带你撸一个拖拽效果

目录 前言 准备 创建所需要结构 编写样式 js编写拖拽效果 解释方法 所有代码 结尾 前言 最近看见一个拖拽效果的视频,看好多人评论说跟着敲也没效果,还有就是作者也不回复大家提出的一些疑问,本着知其然必要知其所以然的心理&#xf…

【疯狂世界杯】css 动画实现跳动的足球

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言📝…

python T检验

T检验通常分为三种:单样本T检验、双样本T检验、配对样本T检验原理可以参考:一文详解t检验本文主要介绍使用python实现T检验的过程,内容主要是参考这篇博文:利用python库stats进行t检验 文章目录一、单样本T检验二、独立样本t检验&…

二、Git本地仓库基本操作——创建Git仓库、提交更新或删除文件

1. 创建本地工作仓库 创建本地工作仓库有两种方法: git init 在本地初始化一个git仓库git clone 直接克隆一个远程的git仓库 方法一: 我们在其中一个目录下,点击鼠标右键,然后启动git bash。输入下面命令: git in…

【实战案例】Python 信用卡欺诈检测其实特简单

当我们在网上购买产品时,很多人喜欢使用信用卡。但信用卡欺诈常常会在身边发生,网络安全正成为我们生活中至关重要的一部分。 为了解决这个问题,我们需要利用机器学习算法构建一个异常行为的识别系统,如果发现可疑,中…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校饭堂管理系统8gmjo

这个选题的话其实有很多的,就看你自己能接受怎么样的,比如可以做网站类、系统类、小程序类、安卓app、大数据类等等,这个也要看你个人能力和技术问题,如果技术小白或者有一点点基础的话建议选择网站类和系统类的,如果有…

微服务框架 SpringCloud微服务架构 10 使用Docker 10.2 镜像命令练习

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构10 使用Docker10.2 镜像命令练习10.2.1 练习10 使用Docker 10.2 镜像命令…

Spring boot 自动装配原理

Spring boot 为了解决Bean的复杂配置&#xff0c;引入了自动装配机制&#xff1b;那么什么是自动装配&#xff0c;它的原理又是什么呢&#xff1f;我们先通过以下例子来了解以一下什么是自动装配。 Spring boot 集成 redis 引入依赖包 <dependency><groupId>org…

CTFShow pwn07 (ret2libc-64bit

用ROPgabdet 找到pop rdi地址和ret地址&#xff1a; 来自ctfshow pwn7&#xff1a; 64位程序是需要栈平衡的&#xff0c;而且前六个寄存器用完了才会用栈传参 %rdi&#xff0c;%rsi&#xff0c;%rdx&#xff0c;%rcx&#xff0c;%r8&#xff0c;%r9 用作函数参数&#xff0c;依…

rust编程-rust所有权理解(chapter 4.1)

目录 1. 什么是所有权 1.1 堆与栈 1.2 变量作用域 1.3 String类型 1.4 内存和分配 1.5 变量和数据交互的方式 1.5 所有权和函数 1.6 返回值和作用域 所有权 是Rust独有的特性&#xff0c;该设计开创了编程语言中的先河。所有权使得Rust能保证内存的安全&#xff0c;且不…

游程编码(Run Length Coding)

游程编码游程编码基本介绍示例1示例2游程编码适用的场景游程编码 游程编码&#xff08;Run Length Coding&#xff0c;简称RLC&#xff09;又称游程编码、行程长度编码、变动长度编码 等&#xff0c;是一种统计编码。主要技术是检测重复的比特或字符序列&#xff0c;并用它们的…

亚马逊云科技re:Invent 2022 Ruba Borno主题演讲

2022亚马逊云科技re:Invent全球大会精彩内容应接不暇&#xff0c;亚马逊云科技全球渠道与联盟副总裁Ruba Borno在2022亚马逊云科技re:Invent大会的全球合作伙伴峰会上&#xff0c;为合作伙伴带来一系列全新的合作伙伴创新服务。 云上发展持续加速的当下&#xff0c;上云好比一场…

使用Fiddler对手机App抓包

目录 一、查看 Fiddler 的 ip 地址 二、设置 Fiddler 允许远程连接 三、进行手机端 App 的抓包 3.1.准备工作 3.2.手机设置 3.3.安装根证书 四、可能会遇到的问题 一、查看 Fiddler 的 ip 地址 有两种方法都可以查询到。 第一种方法&#xff1a; 打开 Fiddler&#xff…

[附源码]计算机毕业设计springboot在线招聘网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

一分钟带你了解音视频开发进阶(先收藏了)

FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发学习路线 随着基础设施的完善&#xff08;光纤入户、wifi覆盖、5G普及&#xff09;的影响&#xff0c;将短视频、直播、视频会议、在线教育、在线医疗瞬间推到了顶峰&#xff0c;人们对音视频的需求和要求也越来越强烈 音视…

实现java项目idea打包发布至服务器(完整版)

问题&#xff1a;如何快速部署本地代码到服务器&#xff1f; 今天介绍的是使用idea的一款插件(Alibaba Cloud Toolkit)实现&#xff0c;首先需要在自己的服务器上安装运行环境&#xff0c;包括&#xff1a;jdk、maven、mysql等&#xff0c;这些操作就不详细说了&#xff0c;可…

Inductive Representation Learning on Large Graphs 论文/GraphSAGE学习笔记

1 动机 1.1 过去的方法 现存的方法大多是transductive的&#xff0c;也就是说&#xff0c;在训练图的时候需要将整个图都作为输入&#xff0c;为图上全部节点生成嵌入&#xff0c;每个节点在训练的过程中都是可知的。举个例子&#xff0c;上一次我学习了GCN模型&#xff0c;它…

考研数据结构大题整合_组三(LZH组)

考研数据结构大题整合 目录考研数据结构大题整合三、LZH组LZH 组一LZH 组二LZH 组三LZH 组四LZH 组五LZH 组七三、LZH组 LZH 组一 给出如图所示的无向图G的邻接矩阵和邻接表两种存储结构. &#xff08;2&#xff09;解答下面的问题&#xff08;6分&#xff09; &#xff08;…

二、进程管理(五)死锁

目录 5.1死锁的定义和产生条件 5.2死锁的处理策略 5.2.1死锁预防 5.2.2死锁避免 5.2.3死锁检测和解除 5.1死锁的定义和产生条件 在并发环境下&#xff0c;各进程因竞争资源而造成的一种互相等待对方手里的资源&#xff0c;导致各进程都阻塞&#xff0c;都无法向前推进的现…

【GlobalMapper精品教程】034:创建漫游动画并制作漫游视频的方法

本实例讲解在globalmapper中根据路径创建漫游动画,并制作漫游视频的方法。 文章目录 一、绘制漫游路径二、创建3D虚拟漫游三、播放虚拟漫游四、保存虚拟漫游实验数据可以是点云数据、DEM、三维模型等,本文加载数字表面模型DSM进行演示。 一、绘制漫游路径 同创建矢量线状数据…