黑马程序员技术交流社区

标题: 原生ajax封装get和post请求 [打印本页]

作者: 闪电侠就是我    时间: 2018-5-7 23:24
标题: 原生ajax封装get和post请求
        /**
* 遇上需要异步处理的函数传入回调函数,在异步函数里面运行回调函数就好了
*/

function Post(url,data,callback,type){
        //1,获得ajax对象
        var ajax = getAjax();

        //2,建立一个post请求,open的第二个参数默认为true(表示异步执行),如果改成false表示同步执行,必须先执行2再执行3
        ajax.open('post',url,true);
       
        //3,设置post请求头
        ajax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
       
        //4,发送请求,里面加上需要发送的数据使用键值对
        ajax.send(data);
       
        //5,设置监听回调函数,当得到ajax请求状态值为4时执行指定代码段
        ajax.onreadystatechange = function(){
               
                if(this.readyState==4){
                       
                        //数据解析方法对象
                        var types = {
                                 'json':function(ajax){
//                                         console.log(ajax);
                                         return JSON.parse(ajax.responseText);
                                 },
                                 'xml':function(ajax){
                                         //如果返回的是xml格式的数据那么在php文件里面必须加上下面这个声明声明,解析xml和使用document对象就可以了
                                         //header('Content-type:text/xml;charset=utf-8');
                                         return ajax.responseXML;
                                 },
                                 'text':function(ajax){
                                         return ajax.responseText;
                                 }
                        };
                       
                        callback(types[type](this));
                }
        }
       
}

//获得ajax对象
function getAjax(){
        var ajax = null;
       
        if(window.XMLHttpRequest){
                //主流浏览器获得ajax对象,w3c和高版本ie(9以上)
                ajax = new XMLHttpRequest();
        }else{
                //低版本ie(6,7,8)
                ajax = new ActiveXObject('Microsoft.XMLHTTP');
        }
       
        return ajax;
}


//get获取请求数据
function Get(url,callback,type){
        //1,获得ajax对象
        var ajax = getAjax();
       
        //2,建立一个http请求,open的第二个参数默认为true(表示异步执行),如果改成false表示同步执行
        //new Date().getTime(),给url加上时间戳来解决ie对get请求php文件时的强制缓存问题
        ajax.open('get',url+new Date().getTime(),true);
       
        //3,发送get请求,里面不填数据就是get请求,
        ajax.send();
       
        //4,设置监听回调函数,当得到ajax请求状态值为4时执行指定代码段
        ajax.onreadystatechange = function(){
                if(ajax.readyState==4){
                        //数据解析方法对象
                        var types = {
                                 'json':function(ajax){
//                                         console.log(ajax);
                                         return JSON.parse(ajax.responseText);
                                 },
                                 'xml':function(ajax){
                                         //如果返回的是xml格式的数据那么在php文件里面必须加上下面这个声明声明,解析xml和使用document对象就可以了
                                         //header('Content-type:text/xml;charset=utf-8');
                                         return ajax.responseXML;
                                 },
                                 'text':function(ajax){
                                         return ajax.responseText;
                                 }
                        };
                       
                        callback(types[type]);
                }
        }
}

作者: zhongqiujie    时间: 2018-5-26 11:30
同学,不错啊,66666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2