之前寫(xiě)過(guò)一篇 先定一個(gè)小目標(biāo),自己封裝個(gè)ajax,是基于原生js的,也就是jquery中ajax的簡(jiǎn)化版本實(shí)現(xiàn)的思路。眾所周知,jquery的ajax是項(xiàng)目中最常用的請(qǐng)求后臺(tái)的方式,也算是封裝的很完美的api了,然而漸漸的我們會(huì)發(fā)現(xiàn),其實(shí)還可以根據(jù)實(shí)際項(xiàng)目需要更優(yōu)雅的進(jìn)行一層封裝,先看調(diào)用方式:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

熟悉EasyUI的猿們可能會(huì)覺(jué)得這種方式有點(diǎn)熟悉,沒(méi)錯(cuò),我就是看easyUI得到的啟發(fā),也顯然這樣的方式更利于前端做判斷,邏輯更清晰明了。那么代碼后面是怎樣封裝的呢,我這里貼出核心的代碼以及思路。

思路

將后臺(tái)返回的不同業(yè)務(wù)狀態(tài)碼以函數(shù)回調(diào)的形式代替,減少if的多層級(jí)判斷。同時(shí)將通用的錯(cuò)誤狀態(tài)碼邏輯(如這里的900狀態(tài)是通用異常)、通用的請(qǐng)求參數(shù)(如client客戶端來(lái)源,是否需要token證書(shū))、請(qǐng)求前置觸發(fā)操作(如加載中動(dòng)畫(huà))等等進(jìn)行統(tǒng)一處理,既減少的代碼量,同時(shí)又更利于維護(hù)。

封裝的js代碼

var LI = {    //發(fā)送get請(qǐng)求
    GET: function(options){        this.ajax(options,'get');
    },    //發(fā)送post請(qǐng)求
    POST: function(options){        this.ajax(options,'post');
    },
    ajax: function(options,type){        var opts = {
            isCommonBefore: true, //默認(rèn)是通用的加載中動(dòng)畫(huà)
            client: 1, //TODO這里應(yīng)該根據(jù)內(nèi)核判斷
            isCors: false,//默認(rèn)不跨域
            isLogin: false
        }
        
        $.extend(true, options, opts || {});        
        //跨域,將請(qǐng)求地址 和 請(qǐng)求參數(shù) 都作為參數(shù)傳遞調(diào)用后臺(tái)固定的跨域接口
        if (opts.isCors) {
          &n