zoukankan      html  css  js  c++  java
  • 封装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>
     
  • 相关阅读:
    js基础 数组reduce
    js基础 数组every some
    js基础 数组forEach
    js基础 数组排序
    js基础 数组findIndex
    nodejs+koa2微信app支付,小程序支付
    Iview-datePicker获取选中的日期,如果没有选,提示错误,选了,错误隐藏
    mongoose+koa2 按照_id更新多条数据,删除数组中的字段,然后添加新的字段,$pull和$or结合使用
    json数组去除重复的值
    mongoose根据_id更新,且如果数组中没有元素就添加
  • 原文地址:https://www.cnblogs.com/lmm1010/p/13129504.html
Copyright © 2011-2022 走看看