• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

        小程序如何完成網絡請求 (詳細過程)

        小程序如何完成網絡請求 (詳細過程)

        更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

        微信小程序,簡稱小程序,英文名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、代碼簡潔,一行代碼去搞定。
        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

        最后,控制臺查看日志的示意圖為:
        20180915143125445.png

        以上就是小程序如何實現網絡請求 (詳細過程)的詳細內容,更多請關注php中文網其它相關文章!


        小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 中文字幕亚洲专区| 亚洲精品白色在线发布| 免费人成网站7777视频| 亚洲精品无码久久一线| 亚洲av无码兔费综合| 日韩免费的视频在线观看香蕉| 99久久免费精品国产72精品九九| 中文字幕精品无码亚洲字| 香港特级三A毛片免费观看| 少妇无码一区二区三区免费| 伊人久久亚洲综合影院| 亚洲女人影院想要爱| 91成人免费观看在线观看| 国产免费看插插插视频| 亚洲精品不卡视频| 国产卡一卡二卡三免费入口| 亚洲动漫精品无码av天堂| 麻豆69堂免费视频| 亚洲精品第一国产综合精品99| 亚洲欧洲日韩极速播放 | 亚洲综合自拍成人| 国产精品亚洲а∨天堂2021| 曰批全过程免费视频在线观看| 亚洲sss综合天堂久久久| 四虎在线成人免费网站| 亚洲a一级免费视频| 久久久免费观成人影院| 亚洲精品97久久中文字幕无码| 国产日韩AV免费无码一区二区三区| 国产亚洲成av片在线观看| 91短视频在线免费观看| 91亚洲精品第一综合不卡播放| 国产羞羞的视频在线观看免费| 四虎永久免费地址在线网站| 好猛好深好爽好硬免费视频| 亚洲AV日韩精品久久久久| 亚洲成在人线aⅴ免费毛片| 国产午夜亚洲精品不卡| 亚洲AV日韩AV永久无码绿巨人 | 18禁止看的免费污网站| 亚洲精品天天影视综合网|