Ajax及其应用

目录

对Ajax工作原理的分析

对XMLHttpRequest对象的属性、方法和事件进行深入理解。

属性

方法

事件

以JSONPlaceHolder为数据服务,编写案例,以进一步阐述Ajax及XMLHttpRequest对象的用法,尽可能涉及更多的应用场景。

参考资料:


对Ajax工作原理的分析

通过XMLHttpRequest对象向服务器发送异步请求,从服务器获得数据,然后用Javascript来操作DOM而更新页面

实现流程:

 

实现Ajax异步交互需要服务器逻辑进行配合,需要完成以下步骤:

  1. 创建Ajax的核心对象XMLHttpRequest对象
  2. 通过XMLHttpRequest对象的open()方法与服务器端建立连接
  3. 构建请求所需要的数据内容,并通过XMLHttpRequest对象的send()方法发送给服务器端
  4. 通过XMLHttpRequest对象提供的onreadystatechange事件监听服务器端你的通信状态
  5. 接受并且处理服务器端向客户端响应的数据结果
  6. 将处理的结果更新到HTML页面中

对XMLHttpRequest对象的属性、方法和事件进行深入理解。

XMLHttpRequest 对象用于在后台与服务器交换数据。

创建XMLHttpRequest 对象语法:

xmlhttp=new XMLHttpRequest();

属性

  • readyState:

HTTP 请求的状态.当一个 XMLHttpRequest 初次创建时,这个属性的值从 0 开始,直到接收 到完整的 HTTP 响应,这个值增加到 4。

状态

名称

描述

0

UNSENT (初始状态,未打开)

初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。open()方法还未被调用。

1

OPENED (已打开,未发送)

open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。

2

HEADERS_RECEIVED(已获取响应头)

send()方法已经被调用, 响应头和响应状态已经返回

3

LOADING

 (正在下载响应体)

响应体(response entity body)正在下载中,此状态下通过xhr.response可能已经有了响应数据

4

DONE

 (整个数据传输过程结束)

整个数据传输过程结束,不管本次请求是成功还是失败

  • responseText:

目前为止为服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。

readyState < 3

responseText属性为空字符串

readyState = 3

该属性返回目前已经接收的响应部分

readyState =4

该属性保存了完整的响应体

  • responseXML:

对请求的响应,解析为XML并作为Document 都对象返回

  • status:

由服务器返回的HTTP状态码,如200为成功;404为“Not Found”错误;readyState < 3读取 该属性会异常

  • statusText:

这个属性用名称而不是数字指定了请求的 HTTP 的状态代码。也就是说,当状态为 200 的时候它是 "OK",当状态为 404 的时候它是 "Not Found"。

方法

方法

含义

abort()

取消当前响应,关闭连接并且结束任何未决的网络活动。readyState 重置为0

getAllResponseHeaders()

把 HTTP 响应头部作为未解析的字符串返回。readyState < 3,这个方法返回 null。否则,它返回服务器发送的所有 HTTP 响应的头部。

getResponseHeader()

返回指定的 HTTP 响应头部的值。其参数是要返回的 HTTP 响应头部的名称。可以使用任何大小写来制定这个头部名字,和响应头部的比较是不区分大小写的。

open(method,url,async)

初始化 HTTP 请求参数,例如 URL 和 HTTP 方法,但是并不发送请求。method:请求的类型,url:文件在服务器的位置,async:ture(异步),false(同步)

send()

发送 HTTP 请求,使用传递给 open() 方法的参数,以及传递给该方法的可选请求体。

setRequestHeader()

向一个打开但未发送的请求设置或添加一个 HTTP 请求。

事件

事件

触发条件

onreadystatechange

每当xhr.readyState改变时触发;但xhr.readyState由非0值变为0时不触发。

onloadstart

调用xhr.send()方法后立即触发,若xhr.send()

未被调用则不会触发此事件。

onprogress

xhr.upload.onprogress在上传阶段(xhr.send()

之后,xhr.readystate=2之前)触发,每50ms触发一次;xhr.onprogress在下载阶段(即

xhr.readystate=3时)触发,每50ms触发一次。

onload

当请求成功完成时触发,此xhr.readystate=4

onloadend

当请求结束(包括请求成功和请求失败)时触发

onabort

当调用xhr.abort()后触发

ontimeout

xhr.timeout不等于0,由请求开始onloadstart

开始算起,当到达xhr.timeout所设置时间请求还未结束即onloadend,则触发此事件。

onerror

在请求过程中,若发生Network error则会触发此事件(若发生Network error时,上传还没有结束,则会先触发xhr.upload.onerror,再触发xhr.onerror;若发生Network error时,上传已经结束,则只会触发xhr.onerror)。

注意,只有发生了网络层级别的异常才会触发此事件,对于应用层级别的异常,如响应返回的xhr.statusCode是4xx时,并不属于Network error,所以不会触发onerror事件,而是会触发onload事件。

以JSONPlaceHolder为数据服务,编写案例,以进一步阐述Ajax及XMLHttpRequest对象的用法,尽可能涉及更多的应用场景。

//创建Ajax核心对象 
var xhr=new XMLHttpRequest() 

//事件处理函数 
xhr.onreadystatechange=function(){ 
if(this.readyState==4 && this.status==200)
{ 
    console.log(this.response);    
}
else{ 
    //fail(new Error("HTTP status Rxception")); 
    console.log(this.status); 
} };     

//发送Ajax请求 
xhr.open("GET","http://1.14.69.117:5000/posts"); 
xhr.responseType="json"; 
xhr.send();

参考资料:

如何实现Ajax,它的原理是什么?_哔哩哔哩_bilibili

你真的会使用XMLHttpRequest吗? - WEB前端路上踩过的坑儿 - SegmentFault 思否

XMLHTTPRequest属性、方法、事件大全&详解_xmlhttprequest 事件_huang100qi的博客-CSDN博客

Ajax及其应用 - 掘金 (juejin.cn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值