前端学习笔记-AJAX

2023-05-16

首字母略缩词AJAX,全名Asynchronous Javascript And XML
卖点当然是第一个词:Asynchronous,即异步;
而最后一个词是XML,当然要谈到XMLHttpRequest这个对象,是发起AJAX的核心;

文章目录

    • 流程5点
    • xhr.readyState,表达的是request的状态:
    • xhr.status,表达的是response的状态
    • 封装

MDN:通过交互式网站和现代 Web 标准,AJAX正在逐渐被 JavaScript 框架中的函数和官方的 Fetch API 标准取代。

流程5点

先参考一下 HTTP 请求:

  1. 设置目标网址、请求方法(get/post)。
  2. 提交请求的数据、请求主体。
  3. 接收响应回来的内容。

发送 Ajax 请求的5点:

  1. 创建xhr对象,即 new 一个 XMLHttpRequest()
  2. 调用open(method, url, async=true)设置请求参数:请求方法、目标url、是否异步。async默认 true。
  3. 调用send()发送请求:
  4. 定义事件回调:onreadystatechange = callback(),状态改变时就会调用。
  5. 服务端响应,在回调函数中获取返回的数据。

看看一般情况下GET的代码即可,正好5步骤对应5行

const xhr = new XMLHttpRequest();
xhr.open('GET', '/api', true);
xhr.send(null);
xhr.onreadystatechange = function () { 
	/* 可拿到xhr.responseText 或 xhr.responseXML*/
};

如果使用POST方法,就需要在send之前调用 xhr对象的 setRequestHeader() 来添加header。然后给 send()传入要发送的数据:

xhr.open('POST', '/api', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send('name=LXY&son=MR');

xhr.readyState,表达的是request的状态:

从0~4共有5个:

state状态助记
0unsent未初始化open()没被调用,请求还未初始化
1opened正在加载open()被调用,已建立服务器链接
2headers_received加载成功send()被调用,请求已接受
3loading交互正在处理请求,下载中
4done完成请求已完成 并且响应已准备好

直接看示例代码:

var xhr = new XMLHttpRequest();
console.log('UNSENT', xhr.readyState); // readyState will be 0

xhr.open('GET', '/api', true);
console.log('OPENED', xhr.readyState); // readyState will be 1

xhr.onprogress = function () {
    console.log('LOADING', xhr.readyState); // readyState will be 3
};

xhr.onload = function () {
    console.log('DONE', xhr.readyState); // readyState will be 4
};

xhr.send(null);

呃,看起来很难在状态2 也就是headers_received的瞬间做什么事情……

但这段代码提醒我们,还有两个事件可以注册回调:onprogressonload ,顾名思义吧。

xhr.status,表达的是response的状态

它的默认值取0 (完成前 或 出错后),正常情况返回的是HTTP status codes (比如200、404那些)。

综上,当 readyState 等于 4 且状态码为 200 时,可判断请求响应的过程成功结束。

两个属性各自表示不同的状态,不要弄混,示例代码:

xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
        console.log('收到:' + JSON.stringify(xhr.responseText));
        // 后续操作:document.querySelector('h1').innerHTML = xhr.responseText;
    }
};

封装

function myAjax(url, callback, failback) {
    // 1、创建XHR对象 new
    const xhr = new XMLHttpRequest();
    // 2、发送请求 open & send
    xhr.open('GET', url, true);
    xhr.send();
    // 3、服务端响应 readyState & status 
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            const obj = JSON.parse(xhr.responseText);
            console.log('返回数据:', obj);
            callback && callback(xhr.responseText);
        } else {
            failback && failback(new Error('请求失败'));
        }
    };
}

// 单次调用
myAjax('a.json', (res) => { console.log(res); });

// 多次调用,给大家表演一个回调地狱
myAjax('a.json', (resA) => {
    console.log(resA);
    myAjax('b.json', (resB) => {
        console.log(resB);
        myAjax('c.json', (resC) => {
            console.log(resC);
        });
    });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端学习笔记-AJAX 的相关文章

  • 使用SDK Manager给TX2刷机且安装OpenCV3.4.0、CUDNN7.6.5、Pytorch、Miniforge(含百度云安装包)

    1 TX2刷机 1 1宿主机 xff1a 即自己的电脑 xff0c 下载安装SDK Manager xff1a NVIDIA SDK Manager NVIDIA Developer xff0c 使用USB线将TX2和宿主机连接 1 2安装
  • 将自己的ubuntu做成镜像(防踩坑指南)

    系统 xff1a Ubuntu16 04或18 04 软件 xff1a systemback 硬件 xff1a 32GU盘一个 xff0c 工控机两台 需求 xff1a 将一台已经配置好的工控机的东西镜像 xff0c 并拷贝到另一台新的工控
  • 【论文学习】Future Person Localization in First-Person Videos

    论文摘要 我们提出了一个新方法来预测第一人称视频中观察到的人的未来位置 采用的是由可穿戴摄像机连续记录的第一人称视频 给出一个人的短片 xff0c 从完整的数据流中提取出来 xff0c 目标是预测这个人在未来帧中的位置 做了以下三个关键的观
  • ROS项目解析JSON的问题

    fatal error json json h No such file or directory sudo apt get install libjsoncpp dev sudo ln s usr include jsoncpp json
  • 找自动驾驶工作该学习哪些必要知识?(ChatGPT-回答版)

    Q xff1a 找自动驾驶工作该学习哪些必要知识 xff1f A xff1a 机器学习 监督学习 xff1a 包括分类 回归等 xff0c 学习如何使用监督学习算法对数据进行预测和分类 无监督学习 xff1a 包括聚类 降维等 xff0c
  • 51单片机定时器初值计算

    菜鸟关于51类单片机的定时器初值计算问题的计算 首先先来介绍单片机的几个周期 xff1a 1 时钟周期 xff0c 也称为振荡周期 xff1a 定义为时钟脉冲的倒数 xff0c 在单片机中也就等于晶振的倒数 51单片机中把一个时钟周期定义为
  • 了解“回收站”

    一 不管是Windows还是Linux桌面 xff0c 删除文件操作都是相同的 1 删除操作 xff0c 可以选中文件 xff0c 按键盘上的 delete 键删除 xff0c 可以是鼠标右键 xff0c 然后在快捷菜单中单击 删除 按钮删
  • 信创环境下三个开源数据库:SQLite、MariaDB(MySQL)和postgreSQL(瀚高数据库免费版)基本操作

    在信创环境下 xff0c 常用的免费数据库主要是 xff1a SQLite MariaDB xff08 MySQL xff09 和postgreSQL xff08 瀚高数据库免费版 xff09 xff0c 可以在一些产品中内嵌使用 SQLi
  • 内网自建yum源和apt源(含各信创系统)

    现在Linux下面软件基本是通过yum apt等从软件仓库在线安装 xff0c 大的Linux发行版都有自己的软件仓库 如CentOS RedHat使用yum方式仓库 xff0c ubuntu使用apt方式仓库 很多政企单位内部网络是和互联
  • 国产信创Linux桌面系统比较:软件包格式及软件管理、桌面环境及桌面应用

    信创产业中 xff0c 操作系统开始整合 xff0c 基本上集中在银河麒麟V10和UOS2 xff0c 很多朋友问到各种国产信创Linux系统的区别和比较 因此结合前期写的几篇文章 xff0c 对这个问题再进行了整理 以龙芯CPU为例 xf
  • Date类型转换为字符串类型

    Date date 61 new Date SimpleDateFormat fmt 61 new SimpleDateFormat 34 yyyy MM dd HH mm ss 34 String dateStr 61 fmt forma
  • 《机关单位办公自动化应用指南 (基于国产信息技术应用创新终端)》与银河麒麟V10

    机关单位办公自动化应用指南 基于国产信息技术应用创新终端 一书适合各国产Linux桌面系统 xff0c 但是举例说明基本是基于中标麒麟V7 银河麒麟V10和中标麒麟V7都采用MATE桌面 xff0c 对于普通用户桌面操作而言差别不大 xff
  • NFS故障:Stale NFS file handle的解决一例

    故障描述 xff1a 一台备份一体机设备作为NFS服务端 xff0c export了目录 infokit exportnfs xff0c 从其他设备上挂载这个NFS 目录 xff0c 在NFS服务端和客户端及其上showmount e 都一
  • CentOS7部署nextcloud最新版本

    Nextcloud 是一个免费专业的私有云存储网盘 开源 项目 xff0c Nextcloud开发人员来自owncloud Nextcloud 跨平台支持 Windows Mac Android iOS Linux 等平台 xff0c 提供
  • SQL表间操作

    MySQL表间操作 近期需要对数据进行整理 xff0c 涉及多个安全产品的数据库 xff0c 基本都是MySQL的 xff0c 经常需要进行表的合并 整理操作 MySQL常见的求交集 并集和差集 1 select a b from tabl
  • ipref网络性能评估工具

    ipref网络性能评估工具 基本介绍 网络的主要性能参数包括带宽 xff0c 时延 xff0c 抖动和丢包率 xff0c 用一个名词就是QOS xff08 服务质量 xff09 Iperf xff08 可测丢包率 xff09 可以用来测量网
  • 抓取特定DNS查询包:tcpdump vs wireshark

    近期 xff0c 在办公网络中出现网络不稳定问题 xff0c 经过分析发现是网内大量的终端安装的安全软件 xff0c 每秒钟都定期进行地址探测 xff0c 其中需要探测taobao com之类的域名地址 xff0c 造成大量的DNS查询 x
  • ceph——数据修复/均衡速度测试

    以副本环境的数据均衡为例 xff0c 以下需要注意 xff1a 1 写入数据时 xff0c 用脚本监控写入数据量 xff08 ceph df xff09 到达预定值 xff0c 开始 停止cosbench cosbench支持命令行 进入c
  • iOS 卡顿、掉帧原因+优化

    卡顿 掉帧原因 VSync垂直信号 xff0c 一般说页面流畅是60fps xff0c 也就是每一秒钟会有60帧画面更新 xff0c 相当于16 7ms就要产生一帧画面 xff0c 那么在这16 7ms之内需要由CPU和GPU共同协同完成产
  • archlinux 安装virtualbox

    一 安装前准备 首先安装 linux headers sudo pacman S linux headers 其次确认linux内核的版本 uname r 如果和header的版本不一致 xff0c 需要更新内核 否则的话会在安装virtu

随机推荐

  • debian 切换默认桌面命令

    update alternatives config x session manager 选择gnome session
  • 解决windows系统80端口被占用问题_

    测试这个命令会把打印机共享等依赖http服务的程序停止 xff0c 导致共享无法使用 xff0c 所以还得寻找别的办法 xff0c 后来终于搜索到一条命令 netsh http show servicestate 1 这条命令可以查看到底是
  • Linux项目自动化构建工具---make/Makefile

    make Makefile 1 背景1 1 如何编写Makefile1 1 1 依赖关系1 1 2 依赖方法1 1 3 项目清理 2 Linux第一个小程序 进度条2 1 回车和换行概念2 2 行缓冲区概念2 3 完整的进度条代码和解析 1
  • IntelliJ Rider2020+Unity+EmmyLua调试的两种方式

    Rider2018 3 1版本中是可以直接附加Unity xff0c 很不错 xff0c 就是调试有几率崩溃 一直想升级到最新版来解决调试不稳定的问题 但将Rider2018 3 1更新到Rider2020 2 1后 xff0c EmmyL
  • Edge浏览器黑色背景设置

    1 打开Edge浏览器 xff0c 点击右上角的三个点 xff0c 选择 扩展 选项 xff0c 如下图 xff1a 2 搜索Dark Reader xff0c 点击 获取 3 点击开启 4 Edge浏览器 设置 外观 主体中选择雨夜模式
  • time(0) 是什么意思?

    time 0 返回的是系统的时间 xff08 从1970 1 1午夜算起 xff09 xff0c 单位 xff1a 秒 time 参数一般为0或者Null相当于 取系统时间 include lt iostream gt include lt
  • 函数指针、表驱动用法

    函数指针 xff08 1 xff09 函数指针含义 函数 在C语言中 xff0c 函数作为功能完成的基本单位 xff0c 它的定义如下 xff1a FunctionType FuncName ArgumentList FunctionBod
  • C++的Char traits模板类

    Char traits 头文件 Char traits h Generic char traits class Note that this class is provided only as a base for explicit spe
  • C++ 文件操作

    需要了解的概念 数据流 缓冲区 Buffer 文件类型 文件存取方式 借助文件指针读写文件 需要理解的知识点包括 xff1a 数据流 缓冲区 文件类型 文件存取方式 1 1 数据流 xff1a 指程序与数据的交互是以流的形式进行的 进行C语
  • 【Web篇】(6.3) ❀ 15. Kali 下载与安装 ❀ FortiWeb 攻防演练

    简介 Kali 是一个基于 Debian 的 Linux 发行版 它的目标就是为了简单 xff1a 在一个实用的工具包里尽可能多的包含渗透和审计工具 Kali 实现了这个目标 大多数做安全测试的开源工具都被囊括在内 Kali 介绍 Kali
  • 修改树莓派系统的更新源,软件安装源和pip安装源

    本文目录 1 更换系统更新源2 更改软件源3 更换 pip 源4 更新系统与软件5 附加知识 Linux系统常用的安装源主要有系统更新源和软件安装源二大类 xff0c 系统更新源是用于对Linux系统本身进行升级更新的 xff0c 软件安装
  • ubuntu虚拟机网络配置同时连接WIFI上外网和连接以太网与ARM开发板通信

    在学习ARM嵌入式开发过程中 xff0c 需要在ubuntu虚拟机下进行程序开发和编译 xff0c 一般需要使用网线直连ARM开发板 xff0c 或挂载NFS网络文件系统 xff0c 或 通过SSH TFTP等网络协议传输在PC端编译完的二
  • error: unable to read askpass response from 解决办法

    出现这个报错 xff0c 我认为原因与你的码云账号有关 xff0c 因为我在网上大量搜过这个问题 xff0c 最后 检查了一番原来是gitee账号登录过期 xff0c 于是重新进行登录 xff0c 可是登录成功还是提示错误 xff0c 最后
  • you-get 参数说明

    pip install you get 1下载所有的视频 you get playlist https www bilibili com bangumi play ep173182 https www bilibili com bangum
  • Hive SQL的编译过程

    Hive是基于Hadoop的一个数据仓库系统 xff0c 在各大公司都有广泛的应用 美团数据仓库也是基于Hive搭建 xff0c 每天执行近万次的Hive ETL计算流程 xff0c 负责每天数百GB的数据存储和分析 Hive的稳定性和性能
  • 如何解决在Windows 11出现“组织在此电脑上管理更新”错误?

    Windows 11出现 组织在此电脑上管理更新 的原因 自微软新操作系统Windows 11发布以来 xff0c 不少用户都希望对自己的旧系统进行升级 xff0c 体验新的界面和功能 为确保您的电脑满足运行Windows 11操作系统的系
  • Linux 下更新grub方法

    vim boot grub2 grub cfg grub2 mkconfig o boot efi EFI uos grub cfg
  • cuda安装报错toolkit installation failed using unsupported compiler

    Error unsupported compiler 7 5 0 Use override to override this check 61 61 61 61 61 61 61 61 61 61 61 61 Summary 61 61 6
  • conda更新被中断,conda命令丢失,一切anaconda相关程序无法启动

    故事背景就不多说了 xff0c 状况就是conda更新的过程被打断了 在Anaconda3 Scripts文件夹下的文件缺失 xff0c 这样conda命令也失效了 jupyter notebook也无法启动 可是我已经建立好的虚拟环境和装
  • 前端学习笔记-AJAX

    首字母略缩词AJAX xff0c 全名Asynchronous Javascript And XML 卖点当然是第一个词 xff1a Asynchronous xff0c 即异步 xff1b 而最后一个词是XML xff0c 当然要谈到XM