使用 XMLHttpRequest(XHR)对象可以与服务器交互。您可以从URL获取数据,而无需让整个的页面刷新。这允许网页在不影响用户的操作的情况下更新页面的局部内容。在 AJAX 编程中,XMLHttpRequest 被大量使用。

文章目录

  • 1. 理解XHR
  • 区别一般http请求与ajax请求
  • 3. API
  • 4. XHR的ajax封装,也算是简单版的axios
    • 4.1 特点
    • 4.2 简单版的axios源码

1. 理解XHR

  1. 使用XMLHttpRequest(XHR)对象可以与服务器交互,也就是发送ajax请求
  2. 前端可以获取到数据,而无需让整个页面刷新
  3. 这使得Web页面可以只更新页面的局部,而不影响用户的操作

区别一般http请求与ajax请求

  1. ajax请求是一种特别的http请求
  2. 对服务器端来说,没有任何区别,区别在浏览器端
  3. 浏览器端发请求:只有XHR或fetch发出的才是ajax请求,其他的所有请求都是非ajax请求
  4. 浏览器端接收到响应
  5. (1) 一般请求: 浏览器一般会直接显示响应体数据, 也就是我们常说的刷新/跳转页面

(2) ajax 请求: 浏览器不会对界面进行任何更新操作, 只是调用监视的回调 函数并传入响应相关数

3. API

  1. XMLHttpRequest():创建XHR对象的构造函数

  2. status: 响应状态码值,比如200,404

  3. statusText: 响应状态文本

  4. readyState: 标识请求状态的只读属性

                    0: 初始<br />                  1: open()之后<br />                  2: send()之后<br />                  3: 请求中<br />                        4: 请求完成
    
  5. onreadystatechange: 绑定readyState改变监听

  6. responseType: 指定相应数据,如果是’json’,得到响应后自动解析响应体数据

  7. response: 响应体数据,类型取决于responseType的指定

  8. timeout: 指定请求超时时间,默认为0代表没限制

  9. ontimeout: 绑定超时的监听

  10. onerror: 绑定请求网络错误的监听

  11. open(): 初始化一个请求, 参数为: (method, url[, async])

  12. send(data): 发送请求

  13. abort(): 中断请求

  14. getResponseHeader(name): 获取指定名称的响应头值

  15. getAllResponseHeaders(): 获取所有响应头组成的字符串
    16. setRequestHeader(name, value): 设置请求头

4. XHR的ajax封装,也算是简单版的axios

4.1 特点

  1. 函数的返回值promise,成功的结果为response,异常的结果为error
  2. 能处理多种类型的请求:GET/POST/PUT/DELETE
  3. 函数的参数为一个配置对象
{url: '', // 请求地址method: '', // 请求方式 GET/POST/PUT/DELETE params: {}, // GET/DELETE 请求的 query 参数 data: {}, // POST 或 DELETE 请求的请求体参数
}
  1. 响应json数据自动解析为js的对象/数组

4.2 简单版的axios源码

   function axios({url,method='GET',params={},data={}}) {// 返回一个promise对象return new Promise((resolve, reject) => {// 处理method(转大写)method = method.toUpperCase()// 处理query参数(拼接到url上)   id=1&xxx=abc/* {id: 1,xxx: 'abc'}*/let queryString = ''Object.keys(params).forEach(key => {queryString += `${key}=${params[key]}&`})if (queryString) { // id=1&xxx=abc&// 去除最后的&queryString = queryString.substring(0, queryString.length-1)// 接到urlurl += '?' + queryString}// 1. 执行异步ajax请求// 创建xhr对象const request = new XMLHttpRequest()// 打开连接(初始化请求, 没有请求)request.open(method, url, true)// 发送请求if (method==='GET' || method==='DELETE') {request.send()} else if (method==='POST' || method==='PUT'){request.setRequestHeader('Content-Type', 'application/json;charset=utf-8') // 告诉服务器请求体的格式是jsonrequest.send(JSON.stringify(data)) // 发送json格式请求体参数}// 绑定状态改变的监听request.onreadystatechange = function () {// 如果请求没有完成, 直接结束if (request.readyState!==4) {return}// 如果响应状态码在[200, 300)之间代表成功, 否则失败const {status, statusText} = request// 2.1. 如果请求成功了, 调用resolve()if (status>=200 && status<=299) {// 准备结果数据对象responseconst response = {data: JSON.parse(request.response),status,statusText}resolve(response)} else { // 2.2. 如果请求失败了, 调用reject()reject(new Error('request error status is ' + status))}}})}

axios学习笔记(二):轻松弄懂XHR的使用及如何封装简易axios相关推荐

  1. 电脑自动关机是什么原因?为什么电脑会自动关机?轻松弄懂

    电脑作为很多小伙伴学习.办公.娱乐的工具.在生活中已然是不可或缺的一部分,很多小伙伴在使用电脑的过程中,有时会碰到电脑自动关机的情况.电脑自动关机是什么原因?为什么电脑会自动关机?别担心,今天小编这篇 ...

  2. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  3. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  4. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  5. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  6. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  7. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

  8. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  9. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

最新文章

  1. 记录使用Spartan-6 FPGA进行一次3-8译码器实验
  2. python安装包之后仍提示_解决已经安装requests,却依然提示No module named requests问题...
  3. 三层架构介绍和MVC设计模型介绍
  4. 图的广度优先搜索(bfs)以及深度优先搜索(dfs)
  5. CentOS 创建SVN 服务器,并且自动同步到WEB 目录
  6. 奔腾双核linux服务器,Dell推出双核心奔腾服务器
  7. uk码对照表_这份中外衣服鞋码尺寸对照表,请收好!
  8. 华为P50 Pro渲染图再曝光:液态镜头、四曲面屏很吸睛
  9. MySQL01:MySQL概述
  10. 使用Nexus搭建Maven仓库
  11. 【气动学】基于matlab GPS卫星仿真【含Matlab源码 1094期】
  12. python音频识别_音频识别和比较
  13. 旧版sai笔刷_sai2笔刷素材包
  14. Xshell实现命令快速输入
  15. OSChina 周一乱弹 ——女人比代码复杂多了,搞不懂!
  16. 鼠标放上去,变成小手状
  17. strcpy s 的用法
  18. 基于ESP32的蓝牙刷屏器自动点击器的制作
  19. qt 从布局中删除子控件
  20. 国外程序员爱用苹果Mac电脑的10大理由

热门文章

  1. 服务器项目有哪些,怎么部署项目到服务器?服务器的特性有哪些?
  2. floatmap 二维数组_Golang学习笔记(四):array、slice、map
  3. c语言判断回文字符串递归,用递归实现判断一个字符串是否为回文串
  4. P3019 [JZOJ]序列和
  5. [sh]shift参数左移用法
  6. javascript中基本类型和引用类型的区别分析
  7. jmeter+ant+jenkins的自动化接口测试
  8. GNU make manual 翻译( 一百六十四)
  9. 初步接触Oracle 11g(1)
  10. Flutter 权限申请