zoukankan      html  css  js  c++  java
  • 原生js ajax 封装

    首先我们先了解ajax的get和post请求分别是怎样请求数据的

    get请求

             let ajx = new XMLHttpRequest() //创建ajax实例
            /*打开需要请求的地址,可以有三个参数
            参1:请求方式
            参2:请求地址
            参3:是否异步,可选,默认异步
            */
            ajx.open('get','http://localhost/day02/api/gouwu.php?name=zhangsan')
            ajx.send()//向后端发送的数据,get方式用不到
            ajx.onreadystatechange = ()=>{//监听状态
                if(ajx.readyState==4){//判断就绪码,4为成功
                    if(ajx.status==200){//判断状态码,200表示成功
                        console.log(ajx.responseText) //打印请求的内容
                    }
                }
            }

    post请求

            let ajx = new XMLHttpRequest() //创建ajax实例
            // /*打开需要请求的地址,可以有三个参数
            // 参1:请求方式
            // 参2:请求地址
            // 参3:是否异步,可选,默认异步
            // */
            ajx.open('post','http://localhost/day02/api/gouwu.php')
            ajx.setRequestHeader('content-type','application/x-www-form-urlencoded')//设置请求头
            ajx.send('name=zhangsan')//向后端发送的数据,get方式用不到
            ajx.onreadystatechange = ()=>{//监听状态
                if(ajx.readyState==4){//判断就绪码,4为成功
                    if(ajx.status==200){//判断状态码,200表示成功
                        console.log(ajx.responseText) //打印请求的内容
                    }
                }
            }

    很麻烦吧,请求个数据我们需要写这么多,那么我们把它封装成get、post请求都可以使用的方法

    首先先想好我们需要调用的方式,这里我封装的调用方式是这样的

    ajax({ //调用封装的方法
        type: 'get', //可以不写,默认get
        url: 'http://localhost/day02/api/gouwu.php', //请求地址
        data: { //需要传输的数据,可选
            name: 'zhangsan',
            age: 18
        }
    },a=>{//处理的到的数据
        console.log(a)
    })

    然后根据上面的调用方法进行封装

    function ajax(obj, fn) {
        let ajx = new XMLHttpRequest() //创建ajax实例
        obj.type = obj.type ? obj.type : 'get' //判断type存不存在,不存在默认等于get
        let data = null //向后端发送的数据
        if (obj.data) { //判断是否存在
            for (let i in obj.data) {
                data += i + '=' + obj.data[i] + '&' //键值拼接成name=zhagnsan&age=18形式
            }
        }
        if (obj.type == 'get') { //处理get请求发送数据
            ajx.open(obj.type, obj.url + '?' + data) //地址上拼接数据
            ajx.send()
        } else if (obj.type == 'post') { //处理post请求发送数据
            ajx.open(obj.type, obj.url)
            ajx.setRequestHeader('content-type', 'application/x-www-form-urlencoded') //设置请求头
            ajx.send(data) //发送数据
        }
        ajx.onreadystatechange = () => {
            if (ajx.readyState == 4) {
                if (ajx.status == 200) {
                     /*
                     将得到的数据传给回调函数
                     短路写法,如果不传fn为空不会执行,有值就执行
                     */
                    fn&&fn(ajx.responseText)
                }
            }
        }
    }

    这样我们就封装好了,以后使用也就变得方便了

  • 相关阅读:
    Selenium开发环境搭建
    如何抓取移动端崩溃日志?
    html+ashx + NPOI 实现导出Excel文件并且预览和下载
    oss 文件上传:Web端上传介绍
    事务控制和锁定语句
    索引的设计和使用
    最近几年读过的书籍
    053.NET5_EFCoreMigration
    052.NET5_EFCoreDbFirst
    051.NET5_中间件的多种引用方式
  • 原文地址:https://www.cnblogs.com/zlf1914/p/13045821.html
Copyright © 2011-2022 走看看