小程式如何實現網路請求 (詳細過程)
這篇文章帶給大家的內容是關於小程式如何實現網路請求 (詳細過程),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
對於小程式而言,網路請求封裝的要比Android強大多了,這一點值得讚揚。官方範例:
wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { 'content-type': 'application/json' // 默认值 }, success: function(res) { console.log(res.data) } })
but…but…這呼叫起來看起來很簡單,但是,似乎有點不對勁?哪裡不對勁呢——每次調用的程式碼太多了。而且,對於網路請求的日誌檔案不好管理。這離我們最理想的方式還是有點差距的。
那麼,我們最理想的方式是希望是怎麼樣的呢?
1、程式碼簡潔,一行程式碼去搞定。
2、對於常用的字段統一封裝管理。如 token、版本號version等
3、自訂異常處理。如未登入時,不用每寫一個介面都去判斷是否登入、註冊等
api.request1(data, function (result) { //数据请求成功, }, function(error){//失败 })
那麼,基於上面的問題。我來一步步進行剖析。
一、網路請求的場景分析
1、支援token傳入的網路請求。
這種情況比較少見的。我現在的專案中就遇到了。大概意思是管理員可以操作旗下的其他的虛擬使用者。管理員登入後產生一個token,每產生一個成員時,會產生一個虛擬的virtualToekn,以後每次管理員操作這個成員時,都需要用這個virtualToken,但是管理員取得自己的資訊時,還是需要用自己的token。這時候就要支援自訂的token傳入了。
2、網路請求的劫持。
這種場景主要有兩種情況:
1、如果網路失敗
2、沒有token時,此場景主要出現在登入後置中。如商城類app查看購物車等
解決方法:直接返回失敗,在發起網絡請求前結束本次網絡請求操作,減少預知的錯誤網絡訪問
3、支持自定義loading視窗的彈出和隱藏控制
1、loading視窗的彈出:這種場景比較多,如下拉刷新清單時,是不需要loading視窗出現的。但是取得使用者資訊是需要loading出現的
2、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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理?一、介紹在PHP專案中,我們經常需要爬取其他網站的數據,並對這些數據進行處理。而許多網站提供了API接口,我們可以透過呼叫這些接口來取得資料。本文將介紹如何使用PHP來呼叫API接口,實現資料的爬取與處理。二、取得API介面的URL和參數在開始之前,我們需要先取得目標API介面的URL以及所需的

Oracle是一家全球知名的資料庫管理系統供應商,其API(ApplicationProgrammingInterface,應用程式介面)是一種強大的工具,可協助開發人員輕鬆地與Oracle資料庫互動和整合。在本文中,我們將深入探討OracleAPI的使用指南,向讀者展示如何在開發過程中利用資料介面技術,同時提供具體的程式碼範例。 1.Oracle

OracleAPI整合策略解析:實現系統間無縫通信,需要具體程式碼範例在當今數位化時代,企業內部系統之間需要相互通信和資料共享,而OracleAPI就是幫助實現系統間無縫通信的重要工具之一。本文將從OracleAPI的基本概念和原則入手,探討API整合的策略,最終給出具體的程式碼範例幫助讀者更好地理解和應用OracleAPI。一、OracleAPI基本

ReactAPI呼叫指南:如何與後端API進行互動和資料傳輸概述:在現代的Web開發中,與後端API進行互動和資料傳輸是一個常見的需求。 React作為一個流行的前端框架,提供了一些強大的工具和功能來簡化這個過程。本文將介紹如何使用React來呼叫後端API,包括基本的GET和POST請求,並提供具體的程式碼範例。安裝所需的依賴:首先,確保在專案中安裝了Axi

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

標題:如何處理LaravelAPI報錯問題,需要具體程式碼範例在進行Laravel開發時,常會遇到API報錯的情況。這些報錯可能來自於程式碼邏輯錯誤、資料庫查詢問題或是外部API請求失敗等多種原因。如何處理這些報錯是一個關鍵的問題,本文將透過具體的程式碼範例來示範如何有效處理LaravelAPI報錯問題。 1.錯誤處理在Laravel

在資料驅動的應用程式和分析領域,API(應用程式介面)在從各種來源檢索資料方面發揮著至關重要的作用。使用API資料時,通常需要以易於存取和操作的格式儲存資料。其中一種格式是CSV(逗號分隔值),它允許有效地組織和儲存表格資料。本文將探討使用強大的程式語言Python將API資料儲存為CSV格式的過程。透過遵循本指南中概述的步驟,我們將學習如何從API中檢索資料、提取相關資訊並將其儲存在CSV檔案中以供進一步分析和處理。讓我們深入了解使用Python進行API資料處理的世界,並釋放CSV格式的潛

PHPAPI介面:如何使用InsomniaInsomnia是一款功能強大的API測試和偵錯工具,它能夠幫助開發者快速、方便地測試和驗證API接口,支援多種程式語言和協議,其中包括PHP。本文將介紹如何使用Insomnia測試PHPAPI介面。第一步:安裝InsomniaInsomnia是一款跨平台的應用程序,支援Windows、MacOS和Linux等
