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

資訊專欄INFORMATION COLUMN

jQuery進階:用最優雅的方式寫ajax請求

zzir / 1433人閱讀

摘要:優點與擴展優點類似與的回調方式優點增加一個接口只是需要增加一個配置文件,很方便擴展當前的的我只寫了,有興趣可以擴展其他的數據類型缺點沒有對函數參數進行校驗

或許你也可以試試:xfire: 簡單優雅、高度可配置的fetch接口批量生成工具
首先需要一個配置文件
var api = {
    basePath: "http://192.168.200.226:58080",
    pathList: [
        {
            name: "agentHeartBeat",
            path:"/api/csta/agent/heartbeat/{{agentId}}/{{type}}/{{something}}",
            method:"get"
        },
        {
            name: "setAgentState",
            path: "/api/csta/agent/state",
            method: "post"
        },
        {
            name: "getAgents",
            path: "/user/agent/{{query}}",
            method: "get"
        }
    ]
}
然后需要一個方法,把配置文件生成接口
function WellApi(Config){
var headers = {};
var Api = function(){};

Api.pt = Api.prototype;

var util = {
    ajax: function(url, method, payload) {
        return $.ajax({
            url: url,
            type: method || "get",
            data: JSON.stringify(payload),
            headers: headers,
            dataType: "json",
            contentType: "application/json; charset=UTF-8"
        });
    },

    /**
     * [render 模板渲染]
     * 主要用于將 /users/{{userId}} 和{userId: "89898"}轉換成/users/89898,和mastache語法差不多,
     * 當然我們沒必要為了這么小的一個功能來引入一個模板庫
     * query字符串可以當做一個參數傳遞進來
     * 例如: /users/{{query}}和{query:"?name=jisika&sex=1"}
     * @Author   Wdd
     * @DateTime 2017-03-13T19:42:58+0800
     * @param    {[type]} tpl [description]
     * @param    {[type]} data [description]
     * @return   {[type]} [description]
     */
    render: function(tpl, data){
        var re = /{{([^}]+)?}}/;
        var match = "";

        while(match = re.exec(tpl)){
            tpl = tpl.replace(match[0],data[match[1]]);
        }

        return tpl;
    }
};

/**
 * [setHeader 暴露設置頭部信息的方法]
 * 有些方法需要特定的頭部信息,例如登錄之后才能獲取sesssionId,然后訪問所有的接口時,必須攜帶sessionId
 * 才可以訪問
 * @Author   Wdd
 * @DateTime 2017-03-13T10:34:03+0800
 * @param    {[type]} headers [description]
 */
Api.pt.setHeader = function(headers){
    headers = headers;
};

/**
 * [fire 發送ajax請求,this會綁定到每個接口上]
 * @Author   Wdd
 * @DateTime 2017-03-13T19:42:13+0800
 * @param    {[type]} pathParm [description]
 * @param    {[type]} payload [description]
 * @return   {[type]} [description]
 */
function fire(pathParm, payload){
    var url = util.render(this.path, pathParm);
    return util.ajax(url, this.method, payload);
}


/**
 * [for 遍歷所有接口]
 * @Author   Wdd
 * @DateTime 2017-03-13T19:49:33+0800
 * @param    {[type]} var i [description]
 * @return   {[type]} [description]
 */
for(var i=0; i < Config.pathList.length; i++){

    Api.pt[Config.pathList[i].name] = {
        path: Config.basePath + Config.pathList[i].path,
        method: Config.pathList[i].method,
        fire: fire
    };
}

return new Api();
}
試用一下



    
    
    
    
    





注意點

fire(pathParm, payload)中的pathParm是最終會被渲染到請求的路徑里面,而paylaod代表請求體。

例如:

// 路徑這么寫
/api/{{version}}/agent/{{id}}/{{somethingElse}}

// pathParm這樣寫
{version: 1, id: "2", somethingElse: "sss"}

// 最終路徑會被渲染成
/api/1/agent/2/sss

path里面不僅僅可放一個變量的,具體可以參考mustache語法,上面代碼里的render是以最簡單的實現。

優點與擴展

[優點]:類似與promise的回調方式

[優點]:增加一個接口只是需要增加一個配置文件,很方便

[擴展]:當前的ajax 的contentType我只寫了json,有興趣可以擴展其他的數據類型

[缺點]:沒有對函數參數進行校驗

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

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

相關文章

  • 【連載】前端個人文章整理-從基礎到入門

    摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現在已經一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現將已經寫好的文章整理一個目錄,方便更多的小伙伴去學習。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...

    madthumb 評論0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件開發前端掘金作者原文地址譯者插件是為應用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內優雅的實現文件分片斷點續傳。 Vue.js 插件開發 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應用添加全局功能的一種強大而且簡單的方式。插....

    izhuhaodev 評論0 收藏0
  • jquery ajax請求參數和返回數據處理

    摘要:處理返回數據,渲染到頁面上去。之前的做法也是和上面一模一樣的吧,返回的數據是數據格式的,然后分別取值賦值給頁面元素,所以代碼往往是這樣的。如果有什么更好的方案,請指教,謝謝另外摘記一個表單輸入框中回車自動提交的情況和處理方案 剛接觸學會用jQuery ajax的時候,覺得真東西好神奇,這樣就可以把數據取回來了啊。然后我可以把取回來的數據渲染到頁面上,一顆賽艇。之前很早接觸到項目,并不知...

    2bdenny 評論0 收藏0
  • 前端基礎進階(十三):透徹掌握Promise使用,讀這篇就夠了

    摘要:在對象的構造函數中,將一個函數作為第一個參數。二對象中的方法,可以接收構造函數中處理的狀態變化,并分別對應執行。 showImg(https://segmentfault.com/img/remote/1460000008932857); Promise的重要性我認為我沒有必要多講,概括起來說就是必須得掌握,而且還要掌握透徹。這篇文章的開頭,主要跟大家分析一下,為什么會有Promise...

    yy736044583 評論0 收藏0

發表評論

0條評論

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