国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從jquery,zepto中提取的90行代碼實現一個完整的ajax

yeooo / 3160人閱讀

摘要:請求地址,異步同步,會鎖死瀏覽器,并且方法會報瀏覽器警告提交方法提交數據賬號密碼返回數據類型成功返回回調錯誤信息回調請求超時

function ajax(options) {
    function empty() {}

    function obj2Url(obj) {
        if (obj && obj instanceof Object) {
            var arr = [];
            for (var i in obj) {
                if (obj.hasOwnProperty(i)) {
                    if (typeof obj[i] == "function") obj[i] = obj[i]();
                    if (obj[i] == null) obj[i] = "";
                    arr.push(escape(i) + "=" + escape(obj[i]));
                }
            }
            return arr.join("&").replace(/%20/g, "+");
        } else {
            return obj;
        }
    };
    var opt = {
        url: "", //請求地址
        sync: true, //true,異步 | false 同步,會鎖死瀏覽器,并且open方法會報瀏覽器警告
        method: "GET", //提交方法
        data: null, //提交數據
        username: null, //賬號
        password: null, //密碼
        dataType: null, //返回數據類型
        success: empty, //成功返回回調
        error: empty, //錯誤信息回調
        timeout: 0, //請求超時ms
    };
    for (var i in options) if (options.hasOwnProperty(i)) opt[i] = options[i];
    var accepts = {
        script: "text/javascript, application/javascript, application/x-javascript",
        json: "application/json",
        xml: "application/xml, text/xml",
        html: "text/html",
        text: "text/plain"
    };
    var abortTimeout = null;
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            xhr.onreadystatechange = empty;
            clearTimeout(abortTimeout);
            var result,dataType, error = false;
            if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == "file:")) {
                if (xhr.responseType == "arraybuffer" || xhr.responseType == "blob") {
                    result = xhr.response;
                } else {
                    result = xhr.responseText;
                    dataType = opt.dataType ? opt.dataType : xhr.getResponseHeader("content-type").split(";", 1)[0];
                    for (var i in accepts) {
                        if (accepts.hasOwnProperty(i) && accepts[i].indexOf(dataType) > -1) dataType = i;
                    }
                    try {
                        if (dataType == "script") {
                            eval(result);
                        } else if (dataType == "xml") {
                            result = xhr.responseXML
                        } else if (dataType == "json") {
                            result = result.trim() == "" ? null : JSON.parse(result)
                        }
                    } catch (e) {
                        opt.error(e, xhr);
                        xhr.abort();
                    }
                }
                opt.success(result, xhr);
            } else {
                opt.error(xhr.statusText, xhr);
            }
        }
    };
    if (opt.method == "GET") {
        var parse = opt.url.parseURL();
        opt.data = Object.assign({}, opt.data, parse.params);
        opt.url = parse.pathname + "?" + obj2Url(opt.data);
        opt.data = null;
    }
    xhr.open(opt.method, opt.url, opt.sync, opt.username, opt.password);
    if (opt.method == "POST") xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    if (opt.timeout > 0) {
        abortTimeout = setTimeout(function() {
            xhr.onreadystatechange = empty
            xhr.abort();
            opt.error("timeout", xhr);
        }, opt.timeout)
    }
    xhr.send(opt.data ? obj2Url(opt.data) : null);
}

test

ajax({
    url:"/url",
    data:{
        i:new Date().getTime(),
    },
    success:function(data,xhr){
        console.log(data,xhr);
    },
    error:function(err,xhr){
        console.log(err,xhr);
    }
});

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91194.html

相關文章

  • Zepto 源碼分析 1 - 進入 Zepto

    摘要:選擇的理由是一個用于現代瀏覽器的與大體兼容的庫。環境搭建分析環境的搭建僅需要一個常規頁面和原始代碼一個常規頁面打開的首頁即可,在開發人員工具中即可使用原始代碼本篇分析的代碼參照,進入該代碼分支中即可。 選擇 Zepto 的理由 Zepto is a minimalist JavaScript library for modern browsers with a largely jQue...

    Aklman 評論0 收藏0
  • JQuery使用總結

    摘要:目前接觸最多的頁面開發,基本還是使用的。主要原因基于操作方便頁面簡單兼容良好新手多沒有能配合使用其他方案的人。,是的核心理念。 目前接觸最多的頁面開發,基本還是使用 JQuery 的。主要原因基于:操作方便;頁面簡單;兼容良好;新手多……沒有能配合使用其他方案的人。因此,本篇文章就是寫著玩加吐點槽的。 Write Less,Do More是JQuery的核心理念。所以你們就不要在工作中...

    tomlingtm 評論0 收藏0
  • JQuery使用總結

    摘要:目前接觸最多的頁面開發,基本還是使用的。主要原因基于操作方便頁面簡單兼容良好新手多沒有能配合使用其他方案的人。,是的核心理念。 目前接觸最多的頁面開發,基本還是使用 JQuery 的。主要原因基于:操作方便;頁面簡單;兼容良好;新手多……沒有能配合使用其他方案的人。因此,本篇文章就是寫著玩加吐點槽的。 Write Less,Do More是JQuery的核心理念。所以你們就不要在工作中...

    dreambei 評論0 收藏0
  • JavaScript Promise啟示錄

    摘要:近幾年隨著開發模式的逐漸成熟,規范順勢而生,其中就包括提出了規范,完全改變了異步編程的寫法,讓異步編程變得十分的易于理解。最后,是如此的優雅但也只是解決了回調的深層嵌套的問題,真正簡化異步編程的還是,在端,建議考慮。 本篇,簡單實現一個promise,主要普及promise的用法。 一直以來,JavaScript處理異步都是以callback的方式,在前端開發領域callback機制...

    Juven 評論0 收藏0
  • [轉載·JS] JavaScript Promise啟示錄

    摘要:近幾年隨著開發模式的逐漸成熟,規范順勢而生,其中就包括提出了規范,完全改變了異步編程的寫法,讓異步編程變得十分的易于理解。最后,是如此的優雅但也只是解決了回調的深層嵌套的問題,真正簡化異步編程的還是,在端,建議考慮。 前段時間頻頻看到Promise這個詞,今天發現騰訊AlloyTeam寫得這篇很贊,遂轉之。 原文鏈接 本篇,主要普及promise的用法。 一直以來,JavaScrip...

    Lyux 評論0 收藏0

發表評論

0條評論

yeooo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<