国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

微信小程序之網絡請求簡單封裝實例詳解

2019-11-19 16:13:47
字體:
來源:轉載
供稿:網友

微信小程序之網絡請求簡單封裝實例詳解

在微信小程序中實現網絡請求相對于Android來說感覺簡單很多,我們只需要使用其提供的API就可以解決網絡請求問題。

  • 普通HTTPS請求(wx.request)
  • 上傳文件(wx.uploadFile)
  • 下載文件(wx.downloadFile)
  • WebSocket通信(wx.connectSocket)

為了數據安全,微信小程序網絡請求只支持https,當然各個參數的含義就不在細說,不熟悉的話可以;可以去閱讀官方文檔的網絡請求api,當我們使用request時header的content-typ默認是application/json,在文檔中指出method 的value必須是大寫,不過經過測試,小寫也能請求成功。request默認的超時時間是60s,如果我們想自定義超時時間,我們可以在app.json中加入下面代碼片段,分別設置request,socket,和上傳文件及下載文件的超時時間。

"networkTimeout": {  "request": 5000,  "connectSocket": 5000,  "uploadFile": 5000,  "downloadFile": 5000 }

設置過超時時間,我們就開始封裝網絡請求,平時我們所接觸的網絡請求,一般會分為兩類,一類是在后臺運行的,沒有加載對話框提示,另一種就是有提示,如提示正在加載數據,,那么我們就以此為線索來進行封裝。先創建一個network的網絡請求工具類,然后

// 展示進度條的網絡請求// url:網絡請求的url// params:請求參數// message:進度條的提示信息// success:成功的回調函數// fail:失敗的回調function requestLoading(url, params, message, success, fail) { console.log(params)  wx.showLoading({   title: message,  }) wx.request({  url: url,  data: params,  header: {   'content-type': 'application/x-www-form-urlencoded'  },  method: 'post',  success: function (res) {   //console.log(res.data)    wx.hideLoading()   if (res.statusCode == 200) {    success(res.data)   } else {    fail()   }  },  fail: function (res) {    wx.hideLoading()    fail()  },  complete: function (res) {  }, })}

上面函數很好理解,參數的含義已在代碼中解釋,在網絡請求開始前,先展示Loading對話框,提示用戶當前網絡正在請求數據,當網絡請求成功或者失敗后調用wx.hideLoading()取消提示框的展示。在api中還提供了wx.showNavigationBarLoading()用于顯示當前頁面的導航條加載動畫,那么如果我們想展示這個動畫可以在requestLoading執行開始調用wx.showNavigationBarLoading(),然后在網絡請求成功或者失敗后調用wx.hideNavigationBarLoading()隱藏導航欄加載動畫。

當網絡請求成功并且狀態碼為200時,將請求到的數據回調通過success(res.data)回調給我們的方法,在上面我們沒有對失敗原因進行細分,當然你也可以給失敗回調加個參數,用于提示用戶失敗的原因,如res.statusCode ==500時提示服務器內部錯誤,res.statusCode ==-1時提示請檢查網絡,res.statusCode ==404,找不到地址等等。

然后我們在創建一個不顯示對話框,用戶后臺請求數據的請求函數,為了少寫代碼,我們共用上面的函數,如下

//不顯示對話框的請求function request(url, params, success, fail) { this.requestLoading(url, params, "", success, fail)}

我們看到我們最終還是調用的requestLoading,那么我們可以在該函數作下判斷,如果提示信息message==''就不顯示對話框。

最終的代碼

function request(url, params, success, fail) { this.requestLoading(url, params, "", success, fail)}// 展示進度條的網絡請求// url:網絡請求的url// params:請求參數// message:進度條的提示信息// success:成功的回調函數// fail:失敗的回調function requestLoading(url, params, message, success, fail) { console.log(params) wx.showNavigationBarLoading() if (message != "") {  wx.showLoading({   title: message,  }) } wx.request({  url: url,  data: params,  header: {   //'Content-Type': 'application/json'   'content-type': 'application/x-www-form-urlencoded'  },  method: 'post',  success: function (res) {   //console.log(res.data)   wx.hideNavigationBarLoading()   if (message != "") {    wx.hideLoading()   }   if (res.statusCode == 200) {    success(res.data)   } else {    fail()   }  },  fail: function (res) {   wx.hideNavigationBarLoading()   if (message != "") {    wx.hideLoading()   }   fail()  },  complete: function (res) {  }, })}module.exports = { request: request, requestLoading: requestLoading}

使用就很簡單了,如下

//路徑根據自己項目路徑修改var network = require("/utils/network.js")getData:function(){  network.requestLoading(URL.MY_SCORE, that.data.params, '正在加載數據', function (res) {  //res就是我們請求接口返回的數據   console.log(res)  }, function () {   wx.showToast({    title: '加載數據失敗',   })  })}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤冈县| 龙口市| 花莲市| 新余市| 巨野县| 浏阳市| 湘阴县| 凤山县| 深州市| 洛隆县| 阿拉善左旗| 溆浦县| 柯坪县| 张掖市| 吴堡县| 永仁县| 天柱县| 上栗县| 海门市| 柏乡县| 蒲江县| 平原县| 舟曲县| 潮安县| 定襄县| 青岛市| 青海省| 迁安市| 龙游县| 五河县| 临桂县| 正安县| 玉林市| 铜山县| 扎囊县| 克东县| 宜昌市| 海门市| 桦甸市| 沁阳市| 龙门县|