美文网首页
Ajax封装

Ajax封装

作者: Admin_Yan | 来源:发表于2019-05-26 13:20 被阅读0次

       AJAX(Asynchronous JavaScript and XML,即异步JavaScript和XML)是一种运用JavaScript和可扩展标记语言(XML)在浏览器和服务器之间进行异步传输数据的技术。简单的说,AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。使用Ajax不会重新加载网页,就可以与服务器交换数据。

       使用Ajax一共可分为以下几步,

    1.创建一个异步对象
    2.设置请求方式和请求地址
    3.发送请求
    4.监听状态的变化
    5.处理返回的结果

    创建一个异步对象,这很简单,就是new一个异步对象,即

    var xmlHttp;
    

    为什么只定义一个变量呢,这是因为在不同的浏览器中,有的不支持xmlHttp对象。
    那么就要判断是否可以创建异步对象。

    if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    

    判断并创建完成之后,接着进行第二步和第三步,设置请求方式和请求地址。
    这里我们借鉴Jquery中的方法,把请求方式和地址都放到一个对象中。

    if (option.type.toLowerCase()==="get") {//toLowerCase将大写转化为小写
            xmlhttp.open(option.type,option.url+"?"+str,true);//第三个参数永远传true,ajax存在的意义就是发送异步请求。
            //3.发送请求
            xmlhttp.send();
        }else{
            xmlhttp.open(option.type,option.url,true);
            //注意点:以下代码必须放在open和send之间
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            //3.发送请求
            xmlhttp.send(str);
        }
    

    监听状态变化和处理返回的结果,

    /*
            readyState存有 XMLHttpRequest 的5种状态。从 0 到 4 发生变化。
                0: 请求未初始化
                1: 服务器连接已建立
                2: 请求已接收
                3: 请求处理中
                4: 请求已完成,且响应已就绪
            */
    
    if (xmlhttp.readyState === 4){
                clearInterval(timer);
                //判断是否请求成功(Http状态码大于等于200,且小于300,和状态码等于304为请求成功)
                if (xmlhttp.status>=200&&xmlhttp.status<300||xmlhttp.status===304) {
                    //5.处理返回的结果
                    // console.log("接收到服务器返回的数据");
                    option.success(xmlhttp);
                }else{
                    // console.log("没有接收到服务器返回的数据");
                    option.error(xmlhttp);
                }
            }
    

    最后整合补充一下

    function obj2str(data) {
        data = data || {}; // 如果没有传参, 为了添加随机因子,必须自己创建一个对象
        data.t = new Date().getTime();
        var res = [];
        for (var key in data){
            //在URL中是不可以出现中文的,如果出现了中文需要转码,可以调用encodeURIComponent方法,URL中只可以出现字母、数字、下划线、ASCII码
            res.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key]));
        }
        return res.join("&");
    }
    function ajax(option){
        var str = obj2str(option.data);//key=value&key=value;
        var xmlhttp,timer;
        if (option.type.toLowerCase()==="get") {//toLowerCase将大写转化为小写
            xmlhttp.open(option.type,option.url+"?"+str,true)
            xmlhttp.send();
        }else{
            xmlhttp.open(option.type,option.url,true);
            //注意点:以下代码必须放在open和send之间
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xmlhttp.send(str);
        }
        xmlhttp.onreadystatechange = function (ev2) {
            if (xmlhttp.readyState === 4){
                clearInterval(timer);
                //判断是否请求成功(Http状态码大于等于200,且小于300,和状态码等于304为请求成功)
                if (xmlhttp.status>=200&&xmlhttp.status<300||xmlhttp.status===304) {
                    option.success(xmlhttp);
                }else{
                    option.error(xmlhttp);
                }
            }
        };
        if (option.timeout){
            timer = setInterval(function () {
                console.log("中断请求");
                xmlhttp.abort();
                clearInterval(timer);
            },option.timeout);
        }
    }
    
    

    最后说明一下,其实也可以用JQuery中封装的方法。

    相关文章

      网友评论

          本文标题:Ajax封装

          本文链接:https://www.haomeiwen.com/subject/tywlzqtx.html