ajax用jquery使用确实方便,但如果只用ajax,难道我们还会为了使用而引入jquery吗?不仅如此,用原生js实现ajax,对理解其调用过程也有帮助。下面就简单封装一个ajax.
/* 封装ajax函数
* @param {string} obj.method http连接的方式,包括POST和GET两种方式
* @param {string} obj.url 发送请求的url
* @param {boolean} obj.async 是否为异步请求,true为异步,false为同步的
* @param {object} obj.data 发送的参数,格式为对象类型
* @param {function} obj.success ajax发送并接收成功调用的回调函数
*/
function ajax(obj) {
//初始化
obj = obj || {};
obj.method = obj.method.toUpperCase() || 'POST';
obj.url = obj.url || '';
obj.async = obj.async || true;
obj.data = obj.data || null;
obj.success = obj.success || function(){};
//创建一个异步调用对象
var xmlHttp = null;
if(XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}else{
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}
//参数处理
var params = [];
for(var key in obj.data) {
params.push(key + '=' + obj.data[key]);
}
var postData = params.join('&');
//发送http请求
if(obj.method.toUpperCase() ==='POST') {
xmlHttp.open(obj.method, obj.url, obj.async);
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset= utf-8')
xmlHttp.send(postData);
}else if(obj.method.toUpperCase() === 'GET') {
xmlHttp.open(obj.method, obj.url + '?' + postData, obj.async);
xmlHttp.send(null);
}
//响应http状态变化函数,成功后回调
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
obj.success(xmlHttp.responseText);
}
}
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。