本文详细讲解如何使用原生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>

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