成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

js封裝 Ajax ——常用工具函數(shù)

wuyangchun / 1949人閱讀

摘要:在前端開(kāi)發(fā)中,的重要性不言而喻,所以我開(kāi)始試著封裝自己專(zhuān)屬常規(guī)封裝封裝函數(shù)連接的方式,包括和兩種方式發(fā)送請(qǐng)求的是否為異步請(qǐng)求,為異步的,為同步的發(fā)送的參數(shù),格式為對(duì)象類(lèi)型發(fā)送并接收成功調(diào)用的回調(diào)函數(shù)常規(guī)封裝用方式發(fā)送數(shù)據(jù)只能用方式發(fā)送數(shù)據(jù)可

在前端開(kāi)發(fā)中,ajax的重要性不言而喻,所以我開(kāi)始試著封裝自己專(zhuān)屬ajax
1.常規(guī)封裝

/* 封裝ajax函數(shù)
 * @param {string}opt.method http連接的方式,包括POST和GET兩種方式
 * @param {string}opt.url 發(fā)送請(qǐng)求的url
 * @param {boolean}opt.async 是否為異步請(qǐng)求,true為異步的,false為同步的
 * @param {object}opt.data 發(fā)送的參數(shù),格式為對(duì)象類(lèi)型
 * @param {function}opt.success ajax發(fā)送并接收成功調(diào)用的回調(diào)函數(shù)
 */
/*1常規(guī)封裝*/
function ajax(opt) {
    opt = opt || {};
    opt.method = opt.method.toUpperCase() || "GET"; //GET:用"GET"方式發(fā)送數(shù)據(jù),只能256KB;POST:用"POST"方式發(fā)送數(shù)據(jù),可以大到4MB
    opt.url = opt.url || "";
    opt.async = opt.async || true; //同步異步
    opt.dataType = opt.dataType || "text"; //所傳的數(shù)的數(shù)據(jù)類(lèi)型
    opt.contentType = opt.contentType || "application/x-www-form-urlencoded; charset=utf-8"; //默認(rèn)表單格式 opt.dataType="json"
    opt.data = opt.data || null;


    var xmlHttp = getXmlHttp(); //獲取XML 對(duì)象

    var postData = getAjaxParama(opt.data); //data

    if (opt.contentType === "application/json;charset=utf-8" && opt.dataType === "json") {
        postData = JSON.stringify(opt.data); //轉(zhuǎn)化為字符串
    }

    if (opt.method === "POST") {
        xmlHttp.open(opt.method, opt.url, opt.async);
        xmlHttp.setRequestHeader("Content-Type", opt.contentType); //而POST請(qǐng)求需要設(shè)置請(qǐng)求頭,用來(lái)傳遞參數(shù)

    } else if (opt.method === "GET") {
        postData = opt.url.indexOf("?") >= 0 ? "&" + postData : "?" + postData; //GET請(qǐng)求,參數(shù)是拼接到url上面;
        xmlHttp.open(opt.method, opt.url + postData, opt.async);
        postData = null; //重置參數(shù)
    }
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            var status = xmlHttp.status;
            if (status >= 200 && status < 300) {
                opt.success && opt.success(xmlHttp.responseText);
            } else {
                opt.error && opt.error(status);
            }
        }
    };

    xmlHttp.send(postData);

    function getXmlHttp() {
        var obj = null;
        //非IE瀏覽器創(chuàng)建XmlHttpRequest對(duì)象
        if (window.XMLHttpRequest) obj = new XMLHttpRequest();

        //IE瀏覽器創(chuàng)建XmlHttpRequest對(duì)象
        if (window.ActiveXObject) {
            try {
                obj = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                try {
                    obj = new ActiveXObject("msxml2.XMLHTTP");
                } catch (ex) {}
            }
        }
        return obj;

    }

    function getAjaxParama(data) {
        var params = [];

        for (var key in data) {
            params.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key]));
        }
        return params.join("&"); //添加&字符串

    }

}

2.自定義封裝

/**
 * [ajax封裝ajax函數(shù)]
 * @Author   Linada
 * @DateTime 2017-12-19T16:16:32+0800
 * @param {string}  opt.method [http連接的方式,包括POST和GET兩種方式]
 * @param {string}  opt.url [發(fā)送請(qǐng)求的url]
 * @param {boolean} opt.async [是否為異步請(qǐng)求,true為異步的,false為同步的]
 * @param {object}  opt.data [發(fā)送的參數(shù),格式為對(duì)象類(lèi)型]
 * @param {function}  opt.success [ajax發(fā)送并接收成功調(diào)用的回調(diào)函數(shù)]
 */

;(function (undefined) {
    "use strict"
    var _global;
    var umeAjax = {
        ajax: function (opt) {
            opt = opt || {};
            opt.method = opt.method.toUpperCase() || "GET"; //GET:用"GET"方式發(fā)送數(shù)據(jù),只能256KB;POST:用"POST"方式發(fā)送數(shù)據(jù),可以大到4MB
            opt.url = opt.url || "";
            opt.async = opt.async || true; //同步異步
            opt.dataType = opt.dataType || "text"; //所傳的數(shù)的數(shù)據(jù)類(lèi)型
            opt.contentType = opt.contentType || "application/x-www-form-urlencoded; charset=utf-8"; //默認(rèn)表單格式 opt.dataType="json"
            opt.data = opt.data || null;


            var xmlHttp = getXmlHttp(); //獲取XML 對(duì)象

            var postData = getAjaxParama(opt.data); //data

            if (opt.contentType === "application/json;charset=utf-8" && opt.dataType === "json") {
                postData = JSON.stringify(opt.data); //轉(zhuǎn)化為字符串
            }

            if (opt.method === "POST") {
                xmlHttp.open(opt.method, opt.url, opt.async);
                xmlHttp.setRequestHeader("Content-Type", opt.contentType); //而POST請(qǐng)求需要設(shè)置請(qǐng)求頭,用來(lái)傳遞參數(shù)

            } else if (opt.method === "GET") {
                postData = opt.url.indexOf("?") >= 0 ? "&" + postData : "?" + postData; //GET請(qǐng)求,參數(shù)是拼接到url上面;
                xmlHttp.open(opt.method, opt.url + postData, opt.async);
                postData = null; //重置參數(shù)
            }
            xmlHttp.onreadystatechange = function () {
                if (xmlHttp.readyState == 4) {
                    var status = xmlHttp.status;
                    if (status >= 200 && status < 300) {
                        opt.success && opt.success(xmlHttp.responseText);
                    } else {
                        opt.error && opt.error(status);
                    }
                }
            };

            xmlHttp.send(postData);
        },


    }

    function getXmlHttp() {
        var obj = null;
        //非IE瀏覽器創(chuàng)建XmlHttpRequest對(duì)象
        if (window.XMLHttpRequest) obj = new XMLHttpRequest();

        //IE瀏覽器創(chuàng)建XmlHttpRequest對(duì)象
        if (window.ActiveXObject) {
            try {
                obj = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                try {
                    obj = new ActiveXObject("msxml2.XMLHTTP");
                } catch (ex) {
                }
            }
        }
        return obj;

    }


    function getAjaxParama(data) {
        var params = [];

        for (var key in data) {
            params.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key]));
        }
        return params.join("&"); //添加&字符串

    }

    // 最后將插件對(duì)象暴露給全局對(duì)象
    _global = (function () {
        return this || (0, eval)("this");
    }());
    if (typeof module !== "undefined" && module.exports) {
        module.exports = umeAjax;
    } else if (typeof define === "function" && define.amd) {
        define(function () {
            return umeAjax;
        });
    } else {
        !("umeAjax" in _global) && (_global.umeAjax = umeAjax);
    }
}());

3.使用




    
    
        js測(cè)試
    
    
    

 
    

4.拓展
封裝post方式的promise的ajax插件

/*
*promise
* 用Promise封裝一個(gè)post請(qǐng)求的方法
*/
function postJSON(url, data) {
    return new Promise(function(resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-type", "application/json;charset=utf-8");

        xhr.onreadystatechange = function() {
            if (this.readyState === 4) {
                if (this.status === 200) {
                    resolve(JSON.parse(this.responseText), this);
                    //debug_print("ajaxPromise(param) success: " +this.responseText);
                } else {
                    var resJson = {
                        code: this.status,
                        response: this.response
                    };
                    reject(resJson, this);
                }
            }
        };
        xhr.send(JSON.stringify(data));
    });
}

// 用Promise封裝一個(gè)get請(qǐng)求的方法,基于ajax
function ajaxPromise(param) {
    return new Promise(function (resolve, reject) {
        $.ajax({
            url: param.url,
            type: "get",
            data: param.data || "",
            success: function (data) {
                //console.info(data);
                debug_print("ajaxPromise(param) success: " + JSON.stringify(data));
                resolve(data);
            },
            error: function (error) {
                //console.info(error);
                debug_print("ajaxPromise(param) error: " + JSON.stringify(error));
                reject(error)
            }
        });
    });
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101376.html

相關(guān)文章

  • 大前端2018現(xiàn)在上車(chē)還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶(hù)端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開(kāi)發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...

    stormgens 評(píng)論0 收藏0
  • 大前端2018現(xiàn)在上車(chē)還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶(hù)端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開(kāi)發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...

    mylxsw 評(píng)論0 收藏0
  • JavaWEB開(kāi)發(fā)14——ajax

    摘要:一概述什么是同步,什么是異步同步現(xiàn)象客戶(hù)端發(fā)送請(qǐng)求到服務(wù)器端,當(dāng)服務(wù)器返回響應(yīng)之前,客戶(hù)端都處于等待卡死狀態(tài)異步現(xiàn)象客戶(hù)端發(fā)送請(qǐng)求到服務(wù)器端,無(wú)論服務(wù)器是否返回響應(yīng),客戶(hù)端都可以隨意做其他事情,不會(huì)被卡死的運(yùn)行原理頁(yè)面發(fā)起請(qǐng)求,會(huì)將請(qǐng)求發(fā)送 一、Ajax概述1.什么是同步,什么是異步同步現(xiàn)象:客戶(hù)端發(fā)送請(qǐng)求到服務(wù)器端,當(dāng)服務(wù)器返回響應(yīng)之前,客戶(hù)端都處于等待 卡死狀態(tài)異步現(xiàn)象:客戶(hù)...

    yearsj 評(píng)論0 收藏0
  • JS事件 - 監(jiān)聽(tīng)、冒泡、ajax 、跨域 與存儲(chǔ)

    摘要:事件綁定方法直接綁定方法封裝函數(shù)調(diào)用綁定事件阻止默認(rèn)行為例標(biāo)簽點(diǎn)擊跳轉(zhuǎn)低版本綁定事件兼容問(wèn)題不識(shí)別方法,改用綁定事件,和標(biāo)準(zhǔn)不一樣事件冒泡部分激活取消取消取消部分阻止往上冒泡激活取消事件冒泡機(jī)制順著數(shù)據(jù)結(jié)構(gòu)底層葉子結(jié)點(diǎn)一個(gè)點(diǎn)擊事件,會(huì)一 1.事件綁定 方法1 - 直接綁定 var btn = document.getElementById(btn1) btn.addEventListe...

    stefanieliang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<