jQuery中Ajax实现&封装一个Ajax工具函数
封装一个Ajax工具函数
原生JS简单实现Ajax
1、先写出调用函数 然后一步步分析封装
// jQuery里面的Ajax就是这样的调用方式
$.ajax({
type:'get', // 请求方式
url:'demo.php', // 后台处理程序地址接口
data:{name:'哈哈',age:22}, // 传输的数据
callback:function(data){ // 回调函数
// data为获取到的数据
console.log(data);
}
});
2、引入一个命名空间
// 定义一个命名空间 防止全局污染
var $ = {
// 传输数据处理函数
joint:function(){},
ajax:function(){}
};
3、首先对要传输的数据进行处理
// data处理函数 将数据处理为 以key1=value1&key2=value2...格式输出
joint:function(data){
var d = '';
// 遍历data数据
for(var key in data){
// 拼接为key1=value1&key2=value2...
d += key + '=' + data[key] + '&';
}
// 去除最后一个&
d = d.slice(0, -1);
// 最后返回d
return d;
}
4、书写ajax函数
// ajax
ajax:function(obj){
// type无数据时默认为get
var type = obj.type || 'get';
// url无数据时默认为当前地址
var url = obj.url || location.pathname;
// data数据处理
var data = this.joint(obj.data);
第一步new
// 实例化
var xhr = new XMLHttpRequest();
// 判断为get提交时 改变url结构
if(type == 'get'){
url = url + '?' + data;
data = null;
}
第二个步open
// 发出请求 请求行信息
xhr.open(type,url);
第三步set
// 判断为post提交时
if(type == 'post'){
// 为get提交时可以不写
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
第四步send
// 发送数据
xhr.send(data);
监听响应状态并处理
xhr.onreadystatechange = function(){
// 处理成功
// xhr.readyState = 4时 响应完成
// xhr.status = 200 成功接收请求
if(xhr.readyState == 4 && xhr.status ==200){
// 获取响应的数据
var data = xhr.responseText;
// 获取响应头文件中的Content-Type信息
var ct = xhr.getResponseHeader('Content-Type');
// 转小写
ct = ct.toLowerCase();
// 判断为响应的为json格式的数据
if(ct.indexOf('json') != -1){
// 将json格式的数据解析为JS类型的json数据
data = JSON.parse(data);
// 判断为响应的为XML格式数据
}else if(ct.indexOf('xml') != -1){
// 获取XML数据
data = xhr.responseXML;
}
// 回调函数返回响应的数据
obj.callback(data);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言