Js编程-AJAX

158 阅读3分钟

AJAX: (async javascript and xml)

xml 可扩展的标记语言。

  • 早期,客户端和服务器端的数据通信,但是基于XML的数据格式完成通信,当代,俩端之间的数据通信,都是基于强大的JSON等数据格式完成。
  • async javascirpt 不是指发送请求是异步的,而是指“浏览器的异步(局部)刷新"【浏览器的全局刷新(服务器端渲染)】

ajax原理: XMLHttpRequest[IE低版本浏览器中ActiveObject]

let xhr = new XMLHttpRequest;

有7个公用的方法:

getAllResponseHeaders: 获取所有的响应头信息

getResponseHeader: 根据传递的参数获取响应头信息

open

abort: 中断一个http请求

setRequestHeader: 设置请求头,必须放在open方法后面,传递的参数不能有中文或者特殊符号 用encodeURLComponent 编译

send

overrideMimeType :覆盖MIMEtype

setTrustToken

做一些基础配置

  • 【method】: 请求方法

  • GET系列: GET/DELTE/HEAD/OPTIONS

HEAD 只用于获取服务器的响应头信息,不需要获取响应主体信息。

OPTIONS 试探请求,在CORS跨域中,每发送真实的请求之前,总会发送一个options请求试探请求,主要是验证俩端是否能够跨域通信。

  • POST系列:POST/PUT/PATCH

PUT 用于向服务存放文件或者存放大批量数据。

GET和POST的区别?

项目中,GET一般是从服务器获取信息的【给服务器的少,获取的多】,POST一般是给服务器推送信息的【给服务器的多,获取的少】

区别都是约定的规范,不是官方规范

GET系列请求,传递给服务器的信息是基于URL问号传参完成的,而POST是基于请求主体完成的【当然也可以设置请求头,携带部分信息】。

GET: xhr.open('GET', 'http:xxxx/xx?lx=1')

POST: xhr.open('post', 'http:xxx/xx') xhr.send("lx=1");

  1. 浏览器对于URL地址的长度是有限制的【ie 大概为2KB】,所以GET传递给服务器的信息不能多,但是POST基于请求主体传递信息,理论上是没有长度限制的,但是实际中为了速度,我们需要手动限制。

  2. GET系列的请求容易造成不可控制的缓存;【如果俩次请求的地址、参数等信息一致,则有可能第二次请求获取的还是第一次请求的结果】,而post则不会。解决办法:让每一次GET请求的地址,保持唯一性 请求参数加一个随机数

3)GET相对POST来讲不安全;类似于url劫持等低端手段,都可以把传递的信息进行肆意的获取和修改。

  • 【url】: 请求链接

  • 【async】: 是否启用异步编程,默认是true,一般都采用异步编程,以防止同步下,当数据请求时,无法做其他事情【避免阻碍】

  • 【username】一般不需要传

  • 【userpass】一般不需要传

xhr.open()

监听请求的状态和阶段,获取服务器返回的信息

  • readyState: ajax请求状态

  • 0: UNSENT 最开始

  • 1:OPENED 已经开始执行open方法

  • 2:HEADERS_RECEIVED 服务器已经返回了响应头

  • 3: LOADING 响应主体正在处理和返回

  • 4:DONE 响应主体已经获取,证明AJAX请求已经成功

  • status 服务器返回的响应状态码

  • 200 :OK 成功

xhr.onreadystatechange = function() {

}

// 设置请求超时的时间

xhr.timeout = 100;

// 在CORS跨域请求中是否允许携带资源凭证(例如:cookie),默认是false

xhr.withCredentials = true;

//监听上传进度:做进度条

xhr.upload.opprogress = function() {}

发送数据请求

  • send中存放的是基于请求主体传送给服务器的信息

  • 数据格式:(设置请求头中的Content-type)

  • form-data 表单提交/文件上传(选取的文件) MIME-->mutipart/form-data

  • x-www-form-urlcoded xxx=xxx&xxx=xx MIME---->application/x-www-form-urlcoded

xhr.send(null)

  • raw Text/JSON/XML.. 文本字符串 MIME: text/plain application/json application/xml...

  • binary 二进制/字节流 MIME --->根据选取的文件不同,有不同的类型 image/jpeg application/vnd

openxmlformats --->officedocument.spreadsheetml.sheet

  • GraphQL