Ajax两种方式封装及举例

function myAjax(obj){
	if(obj.textType=="Jsonp"){
		myAjaxAcross(obj);//跨域访问
	}else{
		myAjaxNormal(obj);//普通访问
	}
}

function myAjaxNormal(obj){
	//初始对象
	var defaults={
		type:"post",
		url:"#",
		data:{},
		textType:"text",
		async:true,
		success:function(data){}
	}
	for(var key in obj)
		defaults[key]=obj[key];
	//获取url后缀
	var params="";
	for(var attr in obj.data){
		params+=attr+"="+obj.data[attr]+"&";
	}
	if(params)
		params=params.substr(0,params.length-1);
	//ajax
	var xhr=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
	if(defaults.type=="get"){
		xhr.open("get",defaults.url+"?"+params,defaults.async);
		xhr.send(null);
	}else{
		xhr.open("post",defaults.url,defaults.async);
		xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		xhr.send(params);
	}
	if(defaults.async){
		xhr.onreadystatechange=function(){
			end();
		}
	}else{
		end();
	}
	//获取php返回值
	function end(){
		if(xhr.readyState==4)
			if(xhr.status==200){
				var result="";//php返回值
				if(defaults.textType=="json")
					result=JSON.parse(xhr.responseText);
				else if(defaults.textType=="xml")
					result=xhr.responseXML;
				else
					result=xhr.responseText;
				defaults.success(result);
			}
	}
}
function myAjaxAcross(obj){
	//初始对象
	var defaults={
		type:"get",
		url:"#",
		data:{},
		Jsonp:"callback",
		JsonpCallback:"hihi",
		success:function(data){}
	};
	for(var key in obj)
		defaults[key]=obj[key];
	//获取url后缀
	var params="";
	for(var attr in defaults.data)
		params+=attr+"="+defaults.data[attr]+"&";
	if(params)
		params=params.substr(0,params.length-1);
	//创建script
	var script=document.createElement("script");
	script.src=defaults.url+"?"+params+"&"+defaults.Jsonp+"="+defaults.JsonpCallback;
	//console.log(script.src);
	//https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=ja&cb=hihi
	var head=document.querySelector('head');
	head.append(script);
	//回调
	window[defaults.JsonpCallback]=function(data){
		defaults.success(data);
		//console.log(data);
	}
}
//验证邮箱的php代码
<?php 
	$email = $_POST["e"];
	if($email == 'zhangsan@qq.com') {
		echo "Yes";
	} else {
		echo "No";
	}
 ?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>ajax封装</title>
		<script type="text/javascript" src="myAjax2.js"></script>
		<script type="text/javascript">
			window.οnlοad=function(){
				var email=document.getElementById("email");
				email.οnkeyup=function(){
					var value=email.value;//输入内容
					var emailTip=document.getElementById("emailTip");
					myAjax({
						type:"post",
						url:"php/checkEmail.php",
						data:{e:value},
						textType:"text",//php传回类型
						async:true,
						success:function(data){
							emailTip.innerText=data;
						}
					});
				};
				var key=document.getElementById("key");
				key.οnkeyup=function(){
					var keyWord=key.value;
					myAjax({
						type:"get",
						url:"https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
						data:{wd:keyWord},
						textType:"Jsonp",
						Jsonp:"cb",
						JsonpCallback:"hihi",
						success:function(data){
							//console.log(data);
							var lis="";
							for(var i=0;i<data.s.length;i++){
								lis+="<li>"+data.s[i]+"</li>";
							}
							var results=document.getElementById("results");
							results.innerHTML=lis;
						}
					});
				}
			}
		</script>
	</head>
	<body>
		<input type="email" name="email" id="email" placeholder="请输入验证邮箱"/> <span id="emailTip"></span>
		<br />
		<input type="text" id="key" placeholder="请输入搜索关键词"/>
		<ul id="results"></ul>
	</body>
</html>
原文地址:https://www.cnblogs.com/aeipyuan/p/12285304.html