11.手写封装Ajax请求

本文详细介绍了AJAX的工作原理,包括创建XMLHttpRequest对象、设置请求参数、发送GET和POST请求,以及处理响应状态和数据。通过实例展示了如何在success和fail回调中操作请求结果。
摘要由CSDN通过智能技术生成

AJAX是 Asynchronous JavaScript and XML 的缩写,指的是通过 JavaScript 的 异步通信,从服务器获取 XML 文档从中提取数据,再更新当前网页的对应部分,而不用刷新整个网页。

创建AJAX请求的步骤:

  • 创建一个 XMLHttpRequest 对象。
  • 初始化参数类容,请求方法默认为GET,请求格式默认为json
  • 处理参数,将参数变为字符串,方便加在路径当中
  • 在这个对象上使用 open 方法创建一个 HTTP 请求,open 方法所需要的参数是请求的方法、请求的地址、是否异步和用户的认证信息。
  • 在发起请求前,可以为这个对象添加一些信息和监听函数。比如说可以通过 setRequestHeader 方法来为请求添加头信息。还可以为这个对象添加一个状态监听函数。一个 XMLHttpRequest 对象一共有 5 个状态,当它的状态变化时会触发onreadystatechange 事件,可以通过设置监听函数,来处理请求成功后的结果。当对象的 readyState 变为 4 的时候,代表服务器返回的数据接收完成,这个时候可以通过判断请求的状态,如果状态是 200-300之间的话则代表返回正常。这个时候就可以通过 response 中的数据来对页面进行更新了。
  • 当对象的属性和监听函数设置完成后,最后调用 send方法来向服务器发起请求,可以传入参数作为发送的数据体。

function ajax(options){
    //创建xhr对象
    const xhr = new XMLHttpRequest();

    //初始化参数的内容
    options = options || {};
    options.type = (options.type || 'GET').toUpperCase();
    options.dataType = options.dataType || 'json';

    //处理参数
    let str = '';
    let params = options.data;
    for(let key in params){
        str += key + '=' + params[key] + '&'
    }
    //去除最后一个&
    params = str.slice(0,str.length - 1);

    //发起请求
    if(options.type === 'GET'){
        xhr.open('GET',options.url + '?' + params,true);
        xhr.send(null)
    }else if(options.type === 'POST'){
        xhr.open('POST',options.url,true);
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xhr.send(params);
    }

    //接收请求
    xhr.onreadystatechange = function(){
        if(xhr.readyState === 4){
            let status = xhr.status
            if(status >= 200 && status < 300){
                options.success && options.success(xhr.responseText,xhr.responseXML);

            }else {
                options.fail && options.fail(status);
            }
        }
    }
}

//发送GET请求
ajax({
    type: 'get',
    dataType: 'json',
    data: { uid: '64dcd451a2d7172b77c03768', aid: "64db6361c57b44a4c47712af" },
    url: 'http://localhost:3456/wyc/getUser',
    success: function (text, xml) {//请求成功后的回调函数
      console.log(JSON.parse(text))
    },
    fail: function (status) {//请求失败后的回调函数
      console.log(status)
    }
})


//发起POST请求
ajax({
    type: 'post',
    dataType: 'json',
    data: { uid: '64dcd451a2d7172b77c03768', aid: "64db6361c57b44a4c47712af" },
    url: 'http://localhost:3456/wyc/attention',
    success: function (text, xml) {//请求成功后的回调函数
      console.log(JSON.parse(text))
    },
    fail: function (status) {
      console.log(status)
    }
})

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值