原生JavaScript封装简易Ajax函数详解

作者:青柠时间:2026-10-25 05:32:55浏览:511

本文详细讲解如何使用原生JavaScript封装一个简易的Ajax函数。通过定义resolveData处理参数对象,利用XMLHttpRequest对象实现GET和POST请求,并演示完整的调用测试流程,帮助开发者理解底层网络请求机制。

由于原生JavaScript发起的网络请求默认以查询字符串形式提交给服务器,为了方便用户以对象形式传递参数,需要定义一个名为resolveData的函数来处理数据。该函数接收参数对象,遍历其中的键值对,将键和值用等号拼接,存入空数组,最后使用&符号连接数组各项并返回结果。接着定义itheima函数,接收配置对象作为参数,创建XMLHttpRequest对象,并将处理后的参数赋值给变量。针对不同请求类型进行判断,若method全等于GET(通过toUpperCase转为大写处理大小写情况),则调用open方法填入对应值并调用send函数;POST请求类似,但需额外指定Content-Type头以声明MIME类型。最后调用监听事件完成请求配置。


function resolveData(data) {
    var arr = [];
    for (var k in data) {
        var str = k + "=" + data[k];
        arr.push(str)
    }
    return arr.join("&")
}
function itheima(options) {
    var xhr = new XMLHttpRequest();
    var qs = resolveData(options.data);
    if (options.method.toUpperCase() === "GET") {
        xhr.open(options.method, options.url + "?" + qs);
        xhr.send();
    } else if(options.method.toUpperCase() === "POST"){
        xhr.open(options.method, options.url)
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
        xhr.send(qs)
    }
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var result = JSON.parse(xhr.responseText)
            options.success(result);
        }
    }
}

接下来进行实际测试,验证封装的函数是否能成功执行。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>测试界面</title>
<script src="itheima.js"></script>
</head>
<body>
    <script>
        itheima({
            method:"GET",
            url:"http://www.liulongbin.top:3006/api/getbooks",
            data:{
                id:1
            },
            success:function(res){
                console.log(res);
            }
        });
    </script>
</body>
</html>

总结

总结

文章到此结束,希望本文能为您提供帮助,欢迎继续关注本站获取更多技术内容!

作者最新文章