XMLHttpRequest 涉及浏览器兼容性,所以创建 ajax 时需要做兼容考虑。具体实现代码如下,代码内进行注释说明:
//参数说明:method加引号 url加引号 data加引号(形式为name=123&age=20 这种形式) 如果没有data,写""作为参数,fnSucc 成功执行回调(比如 function(x){
……} ),fnFaild 失败执行回调
function ajax(method, url ,data, fnSucc, fnFaild)
{
//1.创建Ajax对象
var oAjax = null;
if(window.XMLHttpRequest) //现代浏览器
{
oAjax = new XMLHttpRequest();
}
else //IE浏览器
{
oAjax = new ActiveXObject("microsoft.XMLHTTP");
}
if(method == "get" && data)
{
url += "?" + data +"&"+new Date().getTime();
}
if(method == "get" && !data)
{
url += "?" + new Date().getTime();
}
//2.连接服务器(打开和服务器的连接)
oAjax.open(method, url, true); //url请求地址,设置为异步方式true
if(method == "get" )
{
//3.发送请求
oAjax.send();
}
else
{
oAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //设置请求头,模拟表单post提交,告诉后端,我们是用什么格式编码的
oAjax.send(data);
}
//4.接收返回
oAjax.onreadystatechange = function()
{
if(oAjax.readyState == 4) //浏览器和服务器进行到了哪一步 4表示读取完成,但是不一定结果是成功
{
if(oAjax.status == 200) //读取完成的结果 成功
{
//alert("成功:"+oAjax.responseText);
fnSucc(oAjax.responseText) //把responseText作为参数传进函数 如果要处理的数据是json,那么我们可以使用JS的JSON对象进行操作
}
else
{
//alert("失败");
if(fnFaild) //第三个参数函数如果存在
{
fnFaild(oAjax.status);
//可以传递一个状态进去,可以进一步设置fnFaild函数内当在什么status值时,执行什么函数
}
}
};
};
};
详细原理,见文章:XMLHttpRequest Level 2 使用
(完)
想要打赏,请点击这里