手写一个简易ajax

作者: MongieLee | 来源:发表于2020-02-10 15:10 被阅读0次

Ajax一般是通过XMLHttpRequest对象来是实现的

let request =new XMLHttpRequest() //声明一个XMLHttpRequest对象

常用的方法和属性

XMLHttpRequest对象的setRequestHeader方法

语法:request.setRequestHeader(key,value) //设置请求头

XMLHttpRequest对象的open方法

语法:request.open(method, url, async, user, password); //初始化请求;一般使用前三个参数,后三个为可选参数

method参数

要使用的HTTP方法,比如「GET」、「POST」、「PUT」、「DELETE」、等。对于非HTTP(S) URL被忽略。

url参数

表示向其发送请求的URL。

async 可选参数

表示需不需要异步执行操作,不传入则该参数默认为true,已完成事务的通知可供事件监听器使用。如果值为false,send()方法直到收到答复前不会返回。

XMLHttpRequest对象的send方法

语法:request.send(data) //发送请求,data参数为可选参数。如果是异步请求,则此方法会在请求发送后立即返回;如果是同步请求,则此方法直到响应到达后才会返回。

data参数

表示发送请求时的请求体

在通过send方法发送请求后,request对象在收到响应数据时会自动填充到其对应的属性中,xhr 具有以下常用属性:

responText:响应返回的数据内容

responseXML: 如果响应内容是"text/xml""application/xml",这个属性将保存响应数据的 XML DOM文档

status: 相应的HTTP状态码(200,302,404,503等)

statusText: HTTP状态说明内容(如status的值为200,则statusText的值为"ok")

readyState: 无论请求是否成功,都回响应的一个属性,表示当前的状态

总共有5个状态值,分别为0~4,每个值代表了不同的含义

0:初始化,XMLHttpRequest对象还没有完成初始化

1:载入,XMLHttpRequest对象开始发送请求

2:载入完成,XMLHttpRequest对象的请求发送完成

3:解析,XMLHttpRequest对象开始读取服务器的响应

4:完成,XMLHttpRequest对象读取服务器响应结束

timeout: 设置请求超时时间

需要结合ontimeout事件使用

发送一个请求,readyState会一直改变状态值,当值改变时会触发onreadystatechange事件,所以可以在此处做请求成功/失败后的数据操作,得出以下代码

request.onreadystatechange=()=>{
    if(request.readyState === 4){    //响应已结束时
        if (request.status === 200 && request.status < 300 || request.status === 304) {    //2xx的状态码均表示成功,304状态码表示请求与上次一致
            let tempRT = request.responseText    //将响应的数据内容赋值给tempRT变量
            console.log(tempRT)    //打印数据内容
        }else if(request.status > 400){    //大于400的状态码均表示为请求失败
            console.log("request fail")  //打印请求失败
        }
    }
}
最后封装这个手写的ajax
window.myAjax = {
    ajax: (options) => {  //接受一个对象参数
        let method = options.method
        let url = options.url
        let header = options.header
        let body = options.body
        let request = new XMLHttpRequest()
        request.open(method, url)
        for (key in header) {
            let temp = key
            request.setRequestHeader(key, temp)
        }
        request.onreadystatechange = () => {
            if (request.readyState === 4) {
                if (request.status === 200) {
                    let temp = request.responseText
                    console.log(temp)
                }
            }
        }
        request.send(body)
    }
}
options = {}  //设置传参
myAjax.ajax(options)  //引入该文件,调用全局变量myAjax的ajax方法
功能较为简易,以实现基础功能为需求

相关文章

网友评论

    本文标题:手写一个简易ajax

    本文链接:https://www.haomeiwen.com/subject/fqpaxhtx.html