用原生js实现jquery ajax

一,首先肯定需要创建一个XMLHttpRequest对象
function createXHR(){//创建XMLHttpRequest对象
			if(typeof XMLHttpRequest != "undefined"){
				return new XMLHttpRequest();
			} else if (typeof ActiveXObject != "undefined"){
				if(typeof arguments.callee.activeXString != "string"){
					var versions = [ "MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],i,len;
					for(i = 0,len = versions.length; i < len; i++){
						try{
							new ActiveXObject(versions[i]);
							arguments.callee.activeXString = versions[i];
							break;
						} catch (ex){
							
						}
					}
				}
				return new ActiveXObject(arguments.callee.activeXString);
			}
			else {
				throw new Error("No XHR object available");
			}
		}

二,定义ajax通用函数,通过传递参数控制请求方式与是否异步等
function addURLParam(url,name,value){//给get请求加上参数
			url += (url.indexOf("?") == -1 ? "?" : "&");
			url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
			return url;
		}
addURLParam函数是为在get方式下传输参数使用,以url?a=1&b=2的方式传递
function ajax(type,url,data,async,callback){
			var xhr = eventObject.createXHR();
			if(type == "get"){
				for(var s in data){
					url = eventObject.addURLParam(url,s,data[s]);
				}
				xhr.open(type,url,async);
				xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xhr.send(null);
				if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
					var result = eval(xhr.responseText);
					callback(result);
				}			
			}		
			else if(type == "post"){
				xhr.open(type,url,async);
				xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				var str = "",i=1;
				for(var s in data){
					if(i==1){
						str += s+"="+data[s];
					}
					else {
						str += "&"+s+"="+data[s];
					}
					i++;
				}
				xhr.send(str);
				if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
					var result = eval(xhr.responseText);
					callback(result);
				} 
			}
		}
}
type参数可以选择post或者get,data是要传递的参数(以对象的形式封装),async定义是否异步,callback(result)为回调函数,其中result参数是接受到的值(一般为json数据格式)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值