封装一个 Ajax

71 浏览发布于 作者 zouyang (欢迎转载-请注明出处链接)留下评论分享按钮

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 使用

(完)

想要打赏,请点击这里

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注