• 封装ajax


    要想封装ajax,我们要先了解ajax四部曲

    第一步:创建ajax对象

    第二步:打开接口---ajax.open()

    第三步:发送解析过程---ajax.send()

    第四部:响应完成,可以获取并使用服务器的响应

    接下来按照步骤一步一步去写

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>

    <body>
        <script>
            //对象转字符串
            function objtostring(obj) {
                if (Object.prototype.toString.call(obj).slice(8, -1) === 'Object') {//判断数据类型
                    let objarr = [];//对象数组
                    for (let attr in obj) {
                        objarr.push(attr + '=' + obj[attr]);
                    }
                    return objarr.join('&');
                } else {
                    throw new Erroe('请输入对象');
                }

            }

            function $ajax(option) {//对象
                let promise = new XMLHttpRequest((resolvereject=> {
                    let ajax = new XMLHttpRequest();//第一步
                    //为第二步做准备
                    option.type = option.type || 'get';
                    //判断接口不能为空
                    if (!option.url) {
                        throw new Error('请输入接口地址');
                    }
                    //判断接口数据是否存在,数据类型,数据转换(objtoString)
                    if (option.data && Object.prototype.toString.call(option.data).slice(8, -1) === 'object') {
                        option.data = objtostring(option.data);//对象转字符串。
                    }
                    //判断请求的方式--get(因为ajax的get方式要写在第二步里面所以在第二步之前判断)
                    if (option.data && option.type == 'get') {
                        option.url += '?' + option.data;//后端地址用?和&拼接要传到后端的数据
                    }
                    //判断是否异步
                    if (option.asnyc === 'false' || option.asnyc === false) {
                        option.asnyc = false;//同步
                    } else {
                        option.asnyc = true;//异步
                    }
                    ajax.open(option.typeoption.dataoption.asnyc);
                    //判断请求的方式---post
                    if (option.data && option.type == 'post') {
                        ajax.setRequestHeader('content-type''application/x-www-form-urlencoded');//请求头
                        //第三步
                        ajax.send(option.data);//将要传输的数据写在ajax.send里面
                    } else {
                        ajax.send();//如果数据类型为get,这里就不写。
                    }
                    //第四步
                    //判断是否异步  
                    //异步
                    if (option.asnyc) {//异步
                        ajax.onreadystatechange = function () {//监听事件状态码(事件处理函数)
                            if (onreadystate === 4) {//如果事件状态码为4(表示发送到后端成功)
                                if (ajax.status === 200) {//http状态码为200(后端响应成功)
                                    let data = ajax.responseText;//后端返回的值
                                    if (option.dataType === 'json') {//如果传入的参数的数据类型是json格式
                                        data = JSON.parse(data);//就将json格式的字符串转成对象。
                                    }
                                    resolve(data);
                                } else {
                                    reject('接口地址不存在')
                                }
                            }
                        }
                    } else {
                        //同步()
                        if (ajax.status === 200) {
                            let data = ajax.responseText;//后端返回的值赋值给data
                            if (option.datatype === 'json') {
                                data = JSON.parse(data);
                            }
                            resolve(data);
                        } else {
                            reject('接口地址不存在');
                        }
                    }
                });
                return promiise;
            }
            
        </script>
    </body>
    </html>
     
  • 相关阅读:
    Java 开发必装的 IntelliJ IDEA 插件
    paoding-rose 之 maven配置
    jetty之maven配置
    paoding rose controller包及文件名命名规则
    PowerMock进行mock测试
    谈谈我的windows服务器运维管理
    谈谈RPC中的异步调用设计
    系统:WSL(win10的子系统Linux)
    信息安全攻防基础
    线性规划计算工具Lingo
  • 原文地址:https://www.cnblogs.com/lmm1010/p/13129504.html
Copyright © 2020-2023  润新知