ajax(async javascript and xml)

本文详细介绍了AJAX的工作原理,包括创建XMLHttpRequest、配置请求、监听状态和获取响应,重点讲解了GET与POST的区别、缓存问题、安全注意事项和核心步骤。同时涵盖了路由传参和常见数据格式处理技巧。
摘要由CSDN通过智能技术生成


1. 什么是AJAX?

AJAX核心:基于XMLHttpRequest创建HTTP请求
AJAX解决了网页异步刷新的问题

AJAX是创建交互式网页应用的网页开发技术的一种。

Ajax = 异步 JavaScript 和 XML 或者是 HTML(标准通用标记语言的子集)。可以用于创建快速动态网页的技术。在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

2、AJAX的基础操作

2-1.创建一个XMLHttpRequest

let xhr = new XMLHttpRequest;

2-2. 打开一个URL地址「发送请求前的一些配置信息」

例如:

xhr.open('GET', '/userInfo?id=1'); 

括号内有几个入参,

1、第一个是 请求方式:GET(get/delete/head/options…) / POST(post/put/patch…)

GET和POST在官方定义中是没有明确的区别的,但是浏览器或者开发的时候,都有一套约定俗成的规范:
GET请求传递给服务器的信息,除了请求头传递以外,要求基于URL问号传参传递给服务器
xhr.open(‘GET’, ‘./1.json?lx=1&name=xxx’)
POST请求要求传递给服务器的信息,是基于请求主体传递
xhr.send(‘lx=1&name=xxx’)
也正是因为这点引来了以下几个不同

  • 1、GET传递的信息不如POST多,因为URL有长度限制「IE->2KB」,超过这个长度的信息会被自动截掉,这样导致传递内容过多,最后服务器收到的信息是不完整的!!POST理论上是没有限制的,但是传递的东西越多,速度越慢,可能导致浏览器报传输超时的错误,所以实际上我们会自己手动做限制!!

  • 2、GET会产生缓存「浏览器默认产生的,不可控的缓存」:两次及以上,请求相同的API接口,并且传递的参数也一样,浏览器可能会把第一次请求的信息直接返回,而不是从服务器获取最新的信息!!
    xhr.open(‘GET’, ‘./1.json?lx=1&name=xxx&_’+Math.random())
    在请求URL的末尾设置随机数,以此来清除GET缓存的副作用

  • 3、POST相对于GET来讲更安全一些:GET传递的信息是基于URL末尾拼接,这个随便做一些劫持或者修改,都可以直接改了,而POST请求主体信息的劫持,没那么好做!!但是“互联网面前,人人都在裸奔”!!所以不管什么方式,只要涉及安全的信息,都需要手动加密「因为默认所有的信息传输都是明文的」!!

第二个是 url( 请求的URL地址)
第三个是 async 是否采用异步 默认是TRUE
第四个是 username
第五个是 userpass

2-3 监听请求的过程,在不同的阶段做不同的处理「包含获取服务器的响应信息」

1、ajax状态 xhr.readyState
  • 0 UNSENT 未发送
  • 1 OPENED 执行到open方法
    -----
  • 2 HEADERS_RECEIVED 响应头信息已经返回
  • 3 LOADING 响应主体信息正在处理
  • 4 DONE 响应主体信息已经返回
2、HTTP状态码 xhr.status/xhr.statusText
  • 200 OK
  • 202 Accepted :服务器已接受请求,但尚未处理(异步)
  • 204 No Content:服务器成功处理了请求,但不需要返回任何实体内容
  • 206 Partial Content:服务器已经成功处理了部分 GET 请求(断点续传 Range/If-Range/Content-Range/Content-Type:”multipart/byteranges”/Content-Length….)
  • 301 Moved Permanently 永久转移 「域名迁移」
  • 302 Move Temporarily 临时转移 「负载均衡」
  • 304 Not Modified
  • 305 Use Proxy
  • 400 Bad Request : 请求参数有误
  • 401 Unauthorized:权限(Authorization)
  • 403 Forbidden 服务器拒绝执行「为啥可能会已响应主体返回」
  • 404 Not Found 地址错误
  • 405 Method Not Allowed 请求方式不被允许
  • 408 Request Timeout 请求超时
  • 500 Internal Server Error 未知服务器错误
  • 503 Service Unavailable 超负荷
  • 505 HTTP Version Not Supported

2-4、发送请求「send中传递的信息,就是设置的请求主体信息」

基于请求主体传递给服务器的数据格式是有要求的「Postman接口测试工具」
1、form-data 主要应用于文件的上传或者表单数据提交
xhr.setRequestHeader(‘Content-Type’, ‘multipart/form-data’);
------
let fd = new FormData;
fd.append(‘lx’, 0);
fd.append(‘name’, ‘xxx’);
xhr.send(fd);
2、x-www-form-urlencoded格式的字符串
格式:“lx=1&name=xxx” 「常用」
Qs库:$npm i qs
Qs.stringify/parse:实现对象和urlencoded格式字符串之间的转换
xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form- urlencoded’);
------
xhr.send(Qs.stringify({
lx: 0,
name: ‘xxx’
}));
3.raw字符串格式
普通字符串 -> text/plain
JSON字符串 -> application/json => JSON.stringify/parse 「常用」
XML格式字符串 -> application/xml

4.binary进制数据文件「buffer/二进制…」
一般也应用于文件上传
图片 -> image/jpeg
EXCEL -> application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

5.GraphQL

1、获取响应主体信息 xhr.response/responseText/responseXML…
    服务器返回的响应主体信息的格式
    + 字符串「一般是JSON字符串」 「最常用」
    + XML格式数据
    + 文件流格式数据「buffer/二进制...」
    + ...
2、获取响应头信息 xhr.getResponseHeader/getAllResponseHeaders

3、总结:ajax核心四步

1、创建XHR(ActiveXObject)
2、打开URL
3、监听状态和获取数据
4、发送请求

4、汇总XHR的属性和方法及事件

在这里插入图片描述

xhr.response / xhr.responseText / xhr.responseXML

xhr.status / xhr.statusText

xhr.timeout 超时

xhr.withCredentials 在cors 跨域请求中允许携带资源凭证

xhr.abort() 中断请求

xhr.getAllResponseHeaders()

xhr.getResponseHeader([key])

xhr.open()

xhr.overrideMimeType()

xhr.send()

xhr.setRequestHeader()
在这里插入图片描述

附加小知识:路由传参在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值