我並不是專業的前端開發攻城獅,所以,這篇文章的水平,可能是比較低的,裡面一些觀點,可能都比較可笑。如果有疏漏或錯誤的地方,希望大家能指出來。如果文章的價值不大,也希望大牛能指點一二,在此先謝謝了。
在做實際開發過程中,由於後台只提供介面,不管是android、ios還是H5開發,都是通過調用同一套後台介面去擷取資料,android和ios是通過各自的系統提供的http要求方法去做資料請求的。而H5端,我是採用了ajax的方法來實現載入的,拋棄了類似jsp這樣的後端渲染方案。我採用的是jquery提供的ajax方法來實現資料載入的。jquery提供的ajax方法,已經非常簡潔實用了。但為何還要做二次封裝呢。
在實際項目過程中,剛開始,我並沒有這種想法,我認為jquery提供的ajax方法已經夠簡單了。但項目大概進展了一半的時候,突然發現,寫的ajax方法,代碼挺多都是重複的,但這個時候,並沒有意識到我應該做些什麼。直到一天,後台介面發現所有的請求,都缺少一個關鍵參數,這個時候,我的H5端的所有的ajax請求,都得一個一個手動去添加參數。沒辦法,只能一個一個手動去添加了。但是,這個時候我就在考慮一個問題,假如後期後台又發現缺少一個關鍵參數,我該怎麼辦。難道讓我再一個一個要求方法去手動添加嗎。那還不得累死我啊。另外,如果有個疏漏,漏掉一兩個要求方法,那回頭排查問題,所需的時間,也不少。能不能想個簡單的辦法,如果有修改,我改動一處,所有的請求都同步修改過來呢。這個時候,我想起了我在做android開發中,經常會做一些二次封裝,也許各個項目不同,但一個項目中,我只需要在一個地方控制一下,就可以做到全域同步修改過來。基於這個想法,我想嘗試一下,可以不可以對ajax做一下二次封裝。
思路是有了,但我之前並沒有做過H5端的開發,至於這個思路是否可行,心裡還沒有底。但如果不嘗試一下,又怎麼知道可行不可行呢。大不了就是浪費一些時間罷了。在這個想法下,於是開始了我的ajax二次封裝之路。
當然,既然是基於jquery的ajax方法的二次封裝,其主要內容還是jquery的ajax方法,所有的請求,最終也是走ajax方法。我只是想做一些統一處理,比如,添加一些統一的請求參數,對響應異常,做一下統一處理,方便我對請求做統一處理,同時也方便統一修改。我在封裝方法裡,在請求開始前,顯示載入效果,在請求結束(不管是請求成功還是請求出錯)的時候,結束掉載入效果。那麼,我的所有請求,都會顯示一個統一的載入效果,同時,又不用在每個請求前,添加顯示載入效果的代碼、在載入結束後結束載入效果的代碼。在請求Header裡,統一添加需要的要求標頭參數。也可以在請求data裡,統一添加請求參數。在響應成功方法裡,除了結束掉載入效果外,我還對返回的json資料做了一次統一處理,異常響應在這裡就可以處理掉,不需要業務層每個介面都單獨處理......由於各個項目的需求都不同,所以,每個項目對ajax的封裝可能不會完全一致,但都大同小異。當然,具體封裝還需要根據具體的業務需求,靈活處理。另附上My Code片段
也許已經有大牛做了這樣的工作了,但由於我的技術水平不夠,不足以閱讀其他大作,所以,這個封裝,並沒有參考其他的文章,完全是被實際的業務需求給逼出來的,假如沒有業務變更,可能我也不會想到做這樣的工作。但不管如何,這也是我的一次嘗試。如果有更好的方案,歡迎一起探討。希望各位看官不吝賜教,謝謝大家。