js之ajax的封装

Posted wantu

tags:

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

上节讲了ajax的作用好处即流程为的就是去封装ajax,那......那该怎么封装ajax呢???????

封装方法,传参是个很大的问题!在这里,我们应该传几个参数呢?

  首先我们肯定要传一个请求方式get或post(method),然而json数据也是必不可少的,其次就是需要传入一个URL路径了,在者就需要一个成功的回调和一个失败的回调了;

  如上所示,参数分为(method, json, url, success, error);

参数知道了,ajax流程也有了,那我们就开始封装吧!

  首先创建一个ajax对象,然后再定义一个空的字符串。因为传入的method包含两种请求方式,所以要判断是get还是post。然后再将json数据进行遍历,且将所有的哈希值进行拼接;再截取前面的&符,将url进行拼接,紧接着就是open打开和send提交了。注:get和post请求方式的区别还在于post要设置请求头而get不用。代码如下:

 

function ajax(method,url,json,success,error){
    //创建ajax对象
    var xml = new XMLHttpRequest()||new ActiveXObject("Microsoft,XMLHTTP");
    //定义一个空的字符串
    var str = "";
    //如果是get方式
    if(method == "get"){
        //将所有哈希值进行拼接
        for(var key in json){
            str+="&"+key+"="+json[key];
        }
        //截取前面的&符
        str = str.substr(1);
        //url进行拼接
        url = url+"?"+str;
    
        xml.open("get",url,true);

        xml.send();
    }else{

        //将所有哈希值进行拼接
        for(var key in json){
            str+="&"+key+"="+json[key];
        }
        //截取前面的&符
        str = str.substr(1);

        xml.open("post",url,true);

        //设置请求头
        xml.setRequestHeader("content-type","application/x-www-form-urlencoded");

        xml.send(str);
    }
}

 

  还记得ajax流程最后一步是啥么?没错,就是监听服务器的状态。但是该怎么监听呢?首先就是判断建立连接的状态是否完成(4)并且服务器是否请求成功(200);然后在判断后台数据给的自否是字符串,如果不是我们则将它转换成字符串(JSON.parse( ) );在其之后如果第一个判断为true的话如果成功的回调存在的话则执行成功的回调,如果为false的话有失败的回调则执行失败的回调。代码如下:

 

//监听服务器状态
xml.onreadystatechange = function(){
    //建立连接状态 ----------状态码
    if(xml.readyState == 4 && xml.status == 200){
//后台数据给的自否是字符串 JSON.parse() var data = xml.responseText;
if(typeof data !="object"){ data = JSON.parse(data); }
//成功的回调 success&&success(data); }else{
//失败的回调 error&&error(xml.status); } }

  看吧,ajax就这样封装好啦,快去试试吧。略略略.......

function ajax(method,url,json,success,error){
    var xml = new XMLHttpRequest()||new ActiveXObject("Microsoft,XMLHTTP");
    var str = "";
    if(method == "get"){
        for(var key in json){
            str+="&"+key+"="+json[key];
        }
        str = str.substr(1);
        url = url+"?"+str;    
        xml.open("get",url,true);
        xml.send();
    }else{
        for(var key in json){
            str+="&"+key+"="+json[key];
        }
        str = str.substr(1);
        xml.open("post",url,true);
        xml.setRequestHeader("content-type","application/x-www-form-urlencoded");
        xml.send(str);
    }
    xml.onreadystatechange = function(){
        if(xml.readyState == 4 && xml.status == 200){
            var data = xml.responseText;
            if(typeof data !="object"){
                data = JSON.parse(data);
            }
            success&&success(data);
        }else{
            error&&error(xml.status);
        }
    }
}

 

  不用感谢我,因为我是八宝山喊麦王,嘻嘻。

 






以上是关于js之ajax的封装的主要内容,如果未能解决你的问题,请参考以下文章

js之ajax的封装

AJAX相关JS代码片段和部分浏览器模型

回归 | js实用代码片段的封装与总结(持续更新中...)

关于原生ajax请求及其封装

原生js封装ajax代码

jQuery笔记jQuery之Ajax