封装一个类似jquery的ajax方法

Posted 梦见一只电子羊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装一个类似jquery的ajax方法相关的知识,希望对你有一定的参考价值。

//封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求
//参数格式如下{
// type:"get"/"post",
// dataType:"json"/"jsonp",
// url:"地址",
// data:{key:value}
// success:function(){
// }
// }
//还需要一个跨域方法,可以访问远程服务器的数据

function myAjax(obj){
    var type = obj.type || "get";
    var dataType = obj.dataType || "json";
    var url = obj.url;
    var data = obj.data ||{};
    var success = obj.success;
    //把data拼接成字符串,dataStr就是参数字符串
    var dataStr = "";
    //key=key&com=com&on=flsjfsjdfdsf
    for(var key in data){
        dataStr+=key+"="+data[key]+"&"
    }
    dataStr = dataStr.slice(0,-1);
    if(dataType=="json"){
        var xhr = new XMLHttpRequest();
        if(type=="get"){
            xhr.open("get",url+"?"+dataStr);
            xhr.send(null);
        }else if(type=="post"){
            xhr.open("post",url);
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send(dataStr)
        }
        xhr.onreadystatechange=function(){
            if(xhr.status==200&&xhr.readyState==4){
                var json = xhr.responseText;
                json = JSON.parse(json);
                success(json);
            }
        }
    }else if(dataType=="jsonp"){
        //需要有一个函数名,这个函数名要保证不会重名
        var date = new Date();
        var cbname = "myJsonp"+date.getTime()+Math.random().toString().slice(2);
        //我们要把你传入success对应的函数,放在一个特定函数里面
        window[cbname]=function(data){
            success(data);
            //newScript.parentNode.removeChild(newScript);
        };
        //新建一个script标签,里面的src链接到的就是接口地址(包含参数);
        var newScript = document.createElement("script");
        if(dataStr==""){
            newScript.src = url+"&callback="+cbname;
        }else{
            newScript.src = url+"?"+dataStr+"&callback="+cbname;
        }
        document.body.appendChild(newScript);
    }
}

 

以上是关于封装一个类似jquery的ajax方法的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 封装 ajax 的使用方法

原生javascript封装类似jquery的ajax请求跨域函数

jQuery封装的ajax方法发送jsonp请求ajax全局事件restful风格的api获取XML数据

jquery Ajax 全局调用封装

jQuery高级Ajax

模仿JQuery封装ajax功能