封装一个原生的ajax方法(保存方法^_^)

/*
    封装一个类似于jq的ajax方法,调用与下面类似
    $.ajax({
        url:xxx.php,
        data:{
            'act':'q',
            'user':'ghost',
            'password':'123abc',
        },
        type:'post',
    })
*/
function jsonToUrl(data){//将json数据变成url格式
    var arr=[];
    for(var i in data){
        arr.push(i+'='+data[i]);
    }
    return arr.join('&');
}

function ajax(json){
    json=json||{};
    if(!json.url){
        return;
    }
    json.data=json.data||{};
    json.type=json.type||"get";

    var xhr=null;
    if(window.XMLHttpRequest){
        xhr=new XMLHttpRequest()
    }else{
        xhr=new ActiveXObject("Microsoft.XMLHTTP");
    }

    if(json.type=='get'){
        xhr.open('GET',json.url+'?'+jsonToUrl(json.data),true);
        xhr.send();
    }else{
        xhr.open('POST',json.url,true);
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");//post方法需要添加请求头
        xhr.send(jsonToUrl(json.data));
    }


    xhr.onreadystatechange=function(){//监听
        if(xhr.readyState==4){
            if(xhr.status==200){
                json.success && json.success(xhr.responseText);
            }else{
                json.fail && json.fail(xhr.status);
            }
        }
    }
}

 

posted on 2018-03-03 21:19  小菜园的菜  阅读(139)  评论(0编辑  收藏  举报