伴隨着前端的交互的多樣化,先後端直接的數據往來的頻率也急速的膨脹起來。較多的請求不免給代碼的管理帶來麻煩。前端
使用jQuery
作ajax
請求,咱們會常常使用以下代碼:ajax
$.ajax(url,{ dataType:"jsonp", data:{}, success: function(){} })
多少的請求,就會產生多個類似的代碼片斷,長此以往,便雜亂無章。json
自從jQuery
引入Promise
機制,並重寫了$.ajax
模塊以後,只須對代碼稍做調整,咱們就可以很是便利的管理各類請求。後端
某個SPA
頁面,可能以下一些請求:promise
$.ajax('http://www.xxx.com/getQuery?type=musicData') $.ajax('http://www.xxx.com/getQuery?type=gameData') $.ajax('http://www.xxx.com/getQuery?type=channelData') $.ajax('http://www.xxx.com/getQuery?type=messageData')
分析得出只是查詢參數迥異,咱們可使用hash
來管理請求參數。函數
// 參數管理 var dataUrl = { "muisc" : "musicData", "game" : "gameData", "channel" : "channelData", "message" : "messageData" } // 請求管理 var Req = {} // 遍歷生成相應請求 $.each( dataUrl, function( k ,v ) { Req[k] = function( o ){ // 返回`promise`對象 return $.ajax('http://www.xxx.com/getQuery' + v,$.extend({},{dataType:"jsonp"},o)) } })
爲管理回調函數而生的Proimse
對象,優越性在這個時候體現的淋漓盡致。咱們看看調用的狀況:jsonp
//請求 Music Req.music({/* 其餘查詢參數 */ data: {} }).done(function(res){ /*請求結果*/ }) // 請求 Game Req.game({/* 其餘查詢參數 */ data: {} }).done(function(res){ /*請求結果*/ })
其餘請求均可以如法炮製了。ui
能夠看到,全部的請求聲明都具有了良好的可讀性,管理起來也就是順手多了。若是項目使用了seajs
等做依賴管理,大能夠把請求做爲一個模塊request.js
來管理。url