導讀微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一... 微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。 本篇文章給大家帶來的內容是關于小程序如何實現網絡請求 (詳細過程),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
對于小程序而言,網絡請求封裝的要比Android強大多了,這一點值得贊揚。官方示例: wx.request({ url: 'test.php', //僅為示例,并非真實的接口地址 data: { x: '' , y: '' }, header: { 'content-type': 'application/json' // 默認值 }, success: function(res) { console.log(res.data) } }) but…but…這調用起來貌似很簡單,但是,似乎有點不對勁?哪兒不對勁呢——每次調用的代碼太多了。而且,對于網絡請求的日志文件不好管理。這離我們最理想的方式還是有點差距的。 1、代碼簡潔,一行代碼去搞定。 api.request1(data, function (result) { //數據請求成功, }, function(error){//失敗 }) 那么,基于上面的問題。我來一步步進行剖析。 一、網絡請求的場景分析1、支持token傳入的網絡請求。這種情況比較少見的。我現在的項目中就遇到了。大概意思是管理員可以操作旗下的其他的虛擬用戶。管理員登錄后生成一個token,每生成一個成員時,會生成一個虛擬的virtualToekn,以后每次管理員操作這個成員時,都需要用這個virtualToken,但是管理員獲取自己的信息時,還是需要用自己的token。這個時候就要支持自定義的token傳入了。 2、網絡請求的劫持。這種場景主要有兩種情況: 1、如果網絡失敗 解決方法:直接返回失敗,在發起網絡請求前結束本次網絡請求操作,減少預知的錯誤網絡訪問 3、支持自定義loading窗的彈出和隱藏控制1、loading窗的彈出:這種場景比較多,如下拉刷新列表時,是不需要loading窗出現的。但是獲取用戶信息是需要loading出現的 4、對網絡不同的錯誤,進行處理二、代碼分析/** * 自定義token 請求 * * isShowLoading :true 彈出loading窗 * isEndLoading: true 最后需要隱藏loading窗。若是false,則不隱藏 * token: 可以自定義token。用戶虛擬賬號使用車輛 */ export function requestApi(requestData, isShowLoading = true,isEndLoading = true, token = null,onSuccess, onFail) { let app = getApp().globalData; // 1、檢查是否已經登錄,在未登錄的時候,可以提前緩存一個臨時token欺騙本次檢查。等登錄完成后,再更新token值 if (!util.hasLogin()) { return; } // 2、檢查網絡狀態 if (!util.checkNetworkConnected()) { //沒有網絡 onFail("網絡請求失敗,稍后再試") return; } if (!requestData) { onFail("數據異常,請稍后再試") return; } let cacheToken = util.takeToken() let newToken = token == null ? cacheToken : token console.log("newToken===========>", newToken) requestData.token = newToken requestData.version = app.version console.log("==================================================開始請求網絡數據start========================================") console.log(requestData) console.log("==================================================開始請求網絡數據end===========================================") var baseUrl = app.debug ? app.debugUrl : app.releaseUrl console.log("===baseUrl===>" + baseUrl) if (isShowLoading){ util.showLoading("加載中") } const requestTask = wx.request({ url: baseUrl, data: requestData, header: { 'content-type': 'application/json' }, method: 'POST', dataType: 'json', success: function(res) { console.log("==================================================返回請求結果start========================================") console.log(res.data) console.log("==================================================返回請求結果end===========================================") if (res.data.code == 0) { //成功 // console.log("onSuccess===========>", onSuccess); onSuccess(res.data) } else if (res.data.code == 1021) { //未繳納押金 wx.navigateTo({ url: '/pages/recharge/recharge', }) return false; } else if (res.data.code == 1006) { //余額不足 wx.navigateTo({ url: '/pages/deposited/deposited', }) return false; } else if (res.data.code == 1019) { //未實名 wx.navigateTo({ url: '/pages/certify/certify', }) return false; } else if (res.data.code == 1001) { //token過期 wx.reLaunch({ url: '/pages/login/login' }); return false; } else { //失敗 let error = res.data == null || typeof (res.data) == "undefined" ? "網絡請求失敗,請稍后再試" : res.data.desc onFail(error) console.log("error===========>", error); } }, fail: function(res) { console.log("onFail===========>", res); onFail("網絡請求失敗,稍后再試") }, complete: function(res) { console.log("complete===========>", isEndLoading); if (isEndLoading){ wx.hideLoading() } } }) }; 三、網絡環境統一切換。在app.json中統一配置 // 全局的數據,可以提供給所有的page頁面使用 globalData: { token: "", version: "version版本號", releaseUrl: "正式版url", debugUrl: "測試版url", debug: true //true debug環境,false正式環境 }, 這樣,以后切換網絡環境只需要修改debug值即可。 四、二次封裝/** * 自定義loading 框請求 * * isShowLoading :true 彈出loading窗 * isEndLoading: true 最后需要隱藏loading窗。若是false,則不隱藏 */ export function request(requestData, isShowLoading = true, isEndLoading = true, onSuccess, onFail){ this.requestApi(requestData, isShowLoading, isEndLoading, null, function (result) { onSuccess(result) }, function (error) { onFail(error) }) }/** * 帶有loading 框的 不能自定義的請求 * */export function request1(requestData, onSuccess, onFail) { // console.log("onSuccess========request1===>", success, fail); requestApi(requestData, true, true, null, function (result) { onSuccess(result) }, function (error) { onFail(error) }) }/** * 自定義token 請求 * * isShowLoading :true 彈出loading窗 * isEndLoading: true 最后需要隱藏loading窗。若是false,則不隱藏 * token: 可以自定義token。用戶虛擬賬號使用車輛 */export function request2(requestData, isShowLoading = true, isEndLoading = true, token = null, onSuccess, onFail) { requestApi(requestData, isShowLoading, isEndLoading, token, function (result) { onSuccess(result) }, function (error) { onFail(error) }) }/** * 自定義loading 框請求 * * isShowLoading :true 彈出loading窗 * isEndLoading: true 最后需要隱藏loading窗。若是false,則不隱藏 */export function request3(requestData, isShowLoading = true, isEndLoading = true, token, onSuccess, onFail) { requestApi(requestData, isShowLoading, isEndLoading, token, function (result) { onSuccess(result) }, function (error) { onFail(error) }) } end最后,控制臺查看日志的示意圖為: 以上就是小程序如何實現網絡請求 (詳細過程)的詳細內容,更多請關注php中文網其它相關文章! 小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。 |
溫馨提示:喜歡本站的話,請收藏一下本站!