Ajax的简单封装

562 阅读1分钟

一、Ajax的实现步骤

1.创建Ajax对象

var xhr = new XMLHttpRequest();

2.告诉Ajax的请求方式与请求地址

xhr.open('get','http://localhost:3000')

3.发送请求

xhr.send()

4.获取服务器响应数据

xhr.onload = function(){
    console.log(xhr.responseText);
}

二、Ajax的简单封装

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.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'];
        //设置请求参数格式的类型(post请求必须设置)
        xhr.setRequestHeader('Content-Type', contentType);
        if (contentType == 'application/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;
        //如果响应类型中包含'application/json'
        if (ContentType.includes('application/json')) {
            //将JSON字符串转换为JSON对象
            responseText = JSON.parse(responseText)

        }
        //对http状态码进行判断
        if (xhr.status == 200) {
            defaults.success(responseText, xhr);
        } else {
            defaults.error(responseText, xhr)
        }


    }
}

使用

  ajax({
          url: 'http://localhost:3000/email',
          data: {
           name:'zhangsan'
          },
          success(res) {
            console.log(res);
          }
        });