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

      <script type="text/javascript">
            function ajax(options) {
                // 存储的是默认值
                var defaults = {
                    type: 'get',
                    url: '',
                    data: {},
                    header: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    },
                    success: function() {},
                    error: function() {}
                };

                // 使用options对象中的属性覆盖defaults对象中的属性
                Object.assign(defaults, options);

                // 创建ajax对象
                var xhr = new XMLHttpRequest();
                // 拼接请求参数的变量
                var params = '';
                // 循环用户传递进来的对象格式参数
                for (var attr in defaults.data) {
                    // 将参数转换为字符串格式
                    params += attr + '=' + defaults.data[attr] + '&';
                }
                // 将参数最后面的&截取掉 
                // 将截取的结果重新赋值给params变量
                params = params.substr(0, params.length - 1);

                // 判断请求方式
                if (defaults.type == 'get') {
                    defaults.url = defaults.url + '?' + params;
                }

             
                // 配置ajax对象
                xhr.open(defaults.type, defaults.url);
                // 如果请求方式为post
                if (defaults.type == 'post') {
                    // 用户希望的向服务器端传递的请求参数的类型
                    var contentType = defaults.header['Content-Type']
                        // 设置请求参数格式的类型
                    xhr.setRequestHeader('Content-Type', contentType);
                    // 判断用户希望的请求参数格式的类型
                    // 如果类型为json
                    if (contentType == 'application/json') {
                        // 向服务器端传递json数据格式的参数
                        xhr.send(JSON.stringify(defaults.data))
                    } else {
                        // 向服务器端传递普通类型的请求参数
                        xhr.send(params);
                    }

                } else {
                    // 发送请求
                    xhr.send();
                }
                // 监听xhr对象下面的onload事件
                // 当xhr对象接收完响应数据后触发
                xhr.onload = function() {

                    // xhr.getResponseHeader()
                    // 获取响应头中的数据
                    var contentType = xhr.getResponseHeader('Content-Type');
                    // 服务器端返回的数据
                    var responseText = xhr.responseText;

                    // 如果响应类型中包含applicaition/json
                    if (contentType.includes('application/json')) {
                        // 将json字符串转换为json对象
                        responseText = JSON.parse(responseText)
                    }

                    // 当http状态码等于200的时候
                    if (xhr.status == 200) {
                        // 请求成功 调用处理成功情况的函数
                        defaults.success(responseText, xhr);
                    } else {
                        // 请求失败 调用处理失败情况的函数
                        defaults.error(responseText, xhr);
                    }
                }
            }

            ajax({
                type: 'post',
                // 请求地址
                url: 'http://localhost:3000/responseData',
                success: function(data) {
                    console.log('这里是success函数');
                    console.log(data)
                }
            })
      
        </script>
  • 相关阅读:
    014_IP专项研究监控
    023_System Integrity Protection in macos
    013_UDP专项研究监控
    谈谈MySQL的do语句
    MySQL8的新特性CTE
    MySQL通过Explain查看select语句的执行计划结果触发写操作
    关于QueryCache的一次打脸
    Python 实现进程间通信(网络编程)
    MySQL自成一派的查询提示
    谈谈MySQL的WriteSet并行复制
  • 原文地址:https://www.cnblogs.com/ericblog1992/p/13129612.html
Copyright © 2011-2022 走看看