面试复习题-手写ajax

66 阅读1分钟

✊不积跬步,无以至千里;不积小流,无以成江海

思路

虽然在日常使用中,我们经常用 axios.get / axios.post这样的方法去使用ajax,但是不排除会遇见手写的方法去面试。介绍一下思路。

  1. 定义一个变量,变量名为xhr(XML Http Request)

  2. 定义请求发到的地方

  3. 如对应为GET,则用open的方法,定义方法+路径,对应请求体为空

  4. 如对应POST方法,则用send方法,对应的请求体为数据(自己造一个)

  5. 防御式编程:get之后如果成功(onload)的时候怎么办,如果失败(onerror)的时候怎么办

  6. 5实际上对应的是onreadystatechange事件(固定内容)。如果它的状态等于4,则执行后续内容,否则返回fail。当状态等于4时,如果状态码:大于等于200小于300或等于304

    为啥状态是4 => 固定用法,对应数字为:0时,还未被创建;1时,open已经被调用;2时,send已被调用;3时,正在下载中,还没下载完;4时,已经下载成功。 为啥状态是这个范围?304表示内容没任何更改,其余为固定约束

实现

var XHR = new XMLHttpRequest()
XHR.open('GET', './xxx')
//XHR.onload () => {console.log('good')}
//XHR.onerror () => {}
XHR.onreadystatechange = function(){
    if(request.readyState === 4) {

    if(request.status >= 200 && request.status < 300 || request.status === 304{

        success(XHR)

    }else{

        fail(XHR)
}

XHR.send('{"name": "123"}')