ajax封装

159 阅读1分钟

最基本的请求

创建一个json文件:如a.json

js写法

let ajax = new XMLHttpRequest()
ajax.open('get','/a.json',true)
ajax.send()
ajax.onreadystatechange = () => {
    if(ajax.readyState === 4){
        if(ajax.status === 200) {
            console.log(JSON.parse(ajax.response))
        }
    }
}

jquery写法

$.ajax({
    type:"get",
    url:"/a.json",
    async:true,
    success:function(data){
        console.log(data)
    }
})

此时没有引入jquery文件没有$,自己封装一个ajax的结构

let $ = {
    ajax(options//对象) {
        let ajax = new XMLHttpRequest()
        ajax.open(options.type ,options.url,options.async)
        ajax.send()
        ajax.onreadystatechange = () => {
             if(ajax.readyState === 4){
                  if(ajax.status === 200) {
                    options.success(JSON.parse(ajax.response))
                }
            }
        }
    }
}

如果jquery方法中,type和async省略不写,则修改为

let $ = {
    ajax(options//对象) {
        let ajax = new XMLHttpRequest()
        ajax.open(options.type || 'GET',options.url,options.async || true)          //如果省略自动生成默认值
        ajax.send()
        ajax.onreadystatechange = () => {
             if(ajax.readyState === 4){
                  if(ajax.status === 200) {
                    options.success(JSON.parse(ajax.response))
                }
            }
        }
    }
}

使用get方法调用封装好的ajax

$.get('/a.json',function(data) {
    console.log(data)
})

//此时添加get方法
let $ = {
    get (url,success) {
        this.ajax({
            url,
            success             //当变量和变量名重复时可简写
        })
    },
    ajax(options//对象) {
        let ajax = new XMLHttpRequest()
        ajax.open(options.type || 'GET',options.url,options.async || true)          //如果省略自动生成默认值
        ajax.send()
        ajax.onreadystatechange = () => {
             if(ajax.readyState === 4){
                  if(ajax.status === 200) {
                    options.success(JSON.parse(ajax.response))
                }
            }
        }
    }
}

再次解构options

let $ = {
    get (url,success) {
        this.ajax({
            url,
            success             //当变量和变量名重复时可简写
        })
    },
    ajax({type,url,async,success}) {
        let ajax = new XMLHttpRequest()
        ajax.open(type || 'GET',url,async || true)          //如果省略自动生成默认值
        ajax.send()
        ajax.onreadystatechange = () => {
             if(ajax.readyState === 4){
                  if(ajax.status === 200) {
                    options.success(JSON.parse(ajax.response))
                }
            }
        }
    }
}