之前寫(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)用方式:
熟悉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