原生JS实现Ajax封装:仿jQuery参数传递与请求处理

作者:开源拾贝

时间:2026-10-21

浏览:373

本文介绍如何使用原生JavaScript封装Ajax请求,通过对象传参方式模拟jQuery的调用体验。内容涵盖URL参数拼接、GET与POST请求区分、XMLHttpRequest对象兼容处理及异步回调机制,帮助开发者深入理解Ajax底层原理并提升代码复用性。

文章目录

前言与背景

前言

在日常前端开发中,jQuery的使用频率极高。相较于原生JavaScript,它简化了元素获取的代码,屏蔽了复杂的浏览器兼容性问题,并提供了更便捷的动画效果和方法调用,使得开发过程更加顺畅。然而,jQuery本质上是对原生JS的封装,为了更高效地利用它,我们需要深入理解其背后的实现原理。

参数传递方式

为了实现类似jQuery的灵活调用,封装后的函数需要支持传入任意数量的参数。因此,调用该封装函数时,应采用对象形式传递配置参数,具体格式如下:

示例数据定义


//data作为参数传入我们下面封装的函数
var data = {
       //数据
       user:"yonghu1",
       pass:'12345',
       age:18,
       //回调函数
       success:function (data){
        alert(data);
       }
      }

Ajax封装实现

接下来开始进行函数的具体封装工作。

URL参数拼接辅助函数

第一步是编写一个辅助函数,负责将传入的配置对象转换为URL查询字符串格式。

toData函数代码


function toData(obj){
  if (obj == null){
    return obj;
  }
  var arr = [];
  for (var i in obj){
    var str = i+"="+obj[i];
    arr.push(str);
  }
  return arr.join("&");
}

核心Ajax请求函数

第二步是封装核心的Ajax请求函数。

ajax函数代码


function ajax(obj){
  //指定提交方式的默认值
  obj.type = obj.type || "get";
  //设置是否异步,默认为true(异步)
  obj.async = obj.async || true;
  //设置数据的默认值
  obj.data = obj.data || null;
  if (window.XMLHttpRequest){
    //非ie
    var ajax = new XMLHttpRequest();
  }else{
    //ie
    var ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }
  //区分get和post
  if (obj.type == "post"){
    ajax.open(obj.type,obj.url,obj.async);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var data = toData(obj.data);
    ajax.send(data);
  }else{
    //get test.php?xx=xx&aa=xx
    var url = obj.url+"?"+toData(obj.data);
    ajax.open(obj.type,url,obj.async);
    ajax.send();
  }

  ajax.onreadystatechange = function (){
    if (ajax.readyState == 4){
        if (ajax.status>=200&&ajax.status<300 || ajax.status==304){
          if (obj.success){
            obj.success(ajax.responseText);
          }
        }else{
          if (obj.error){
            obj.error(ajax.status);
          }
        }
      }
   }  
}

总结

以上即为本文的全部内容,希望这些内容能对各位的学习有所帮助,也欢迎大家继续支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章