在微信小程序中實現網絡請求相對於Android來講感受簡單不少,咱們只須要使用其提供的API就能夠解決網絡請求問題。 json
爲了數據安全,微信小程序網絡請求只支持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()隱藏導航欄加載動畫。api
當網絡請求成功而且狀態碼爲200時,將請求到的數據回調經過su
ccess(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: '加載數據失敗',
})
})
}複製代碼