<!DOCTYPE html>
<html>
<head>
<title>封装ajax</title>
</head>
<body>
<script type="text/javascript">
function createXHR()
{
if(typeof XMLHttpRequest != "undefined")
{
return new XMLHttpRequest();
}
else if(typeof ActiveXObject != "undefined")
{
var versions = [
"MSXML.2.XMLHttp.6.0",
"MSXML.2.XMLHttp.3.0",
"MSXML.2.XMLHttp"
];
for(var i = 0; i<versions.length;i++)
{
try{
return new ActiveXObject(version[i]);
}catch(e){
// 因类循环会报一个错,跳过些错
}
}
}
else
{
throw new Error("你的系统或浏览器不支持XHR对象!");
}
}
// 名值对转换字符串
function params(data)
{
var arr = [];
for(var i in data)
{
arr.push(encodeURIComponent(i)+"="+encodeURIComponent(data[i]));
}
return arr.join("&");
}
// ajax
function ajax(obj)
{
var xhr=createXHR();
obj.url=obj.url+"?rand="+Math.random();
obj.data = params(obj.data);
if(obj.method === "GET")
{
obj.url+=obj.url.indexOf("?") == -1 ?"?"+ obj.data:"&"+obj.data;
}
// if it's asynchronous
if(obj.async === true)
{
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4)
{
callback();
}
}
}
xhr.open(obj.method,obj.url,obj.async);
if(obj.method === "POST")
{
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(obj.data);
}
else
{
xhr.send(null);
}
// iF It's synchronization
if(obj.async === false)
{
callback();
}
// 封装重复调用代码
function callback()
{
if(xhr.status === 200)
{
obj.success(xhr.responseText);
}
else
{
alert("错误代码:"+xhr.status+"-错误信息:"+xhr.statusText);
}
}
}
// use ajax
addEventListener("click",function(){
ajax({
method:"POST",
url:"test.php",
data:{
"na&me":"ping",
"age":18
},
// 将对象传到text,然后对象又回调
success:function(text)
{
console.log("接收success数据为:"+text);
},
async:false
});
},false);
</script>
</body>
</html>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。