將官方文檔中wx.request的參數(shù)貼上,方便閱讀微信提供了api,開發(fā)者可以通過wx.request來獲取服務(wù)器的數(shù)據(jù)和傳遞數(shù)據(jù)。雖然api提供了很大的方便,但是調(diào)用多個接口時,代碼重復性太高,我們可以進一步封裝。
新建文件request.js,將請求的封裝方法寫在里面
//var hasClick = false;
const http = (method, url, data, response, error) => {
if (hasClick) {
return
}
// hasClick = true
wx.showLoading({
title: '加載中...',
mask: true
})
wx.request({
method: method,
url: url,
header: {
'content-type': 'application/json'
// 'token': wx.getStorageSync("token")
},
data:data,
success: res => {
return response(res)
},
fail: err => {
return error(err)
},
complete: info => {
wx.hideLoading();
// hasClick = false
}
})
}
module.exports = {
_get: (url, data, response, error) => http('GET', url, data, response, error),
_post: (url, data, response, error) => http('POST', url, data, response, error),
_put: (url, data, response, error) => http('PUT', url, data, response, error),
_delete: (url, data, response, error) => http('DELETE', url, data, response, error),
}
當發(fā)起請求的時候,界面出現(xiàn)“加載中...”的Loading界面,請求完成后,取消加載loading。設(shè)置加載loading的mask屬性為true,可以顯示透明蒙層,防止觸摸穿透。
有遮罩還不夠,某些情況下可能會發(fā)生多次請求(用戶迅速的點擊兩次請求按鈕,在遮罩層未出來之前)。比如在點擊支付的時候,由于調(diào)用支付前的誤操作,支付完成后再次彈出一個支付框,會給用戶帶來非常不好的體驗。
可以在封裝方法中加一個hasClick的“鎖”,在開始請求前檢查是否已經(jīng)發(fā)起過請求,如果沒有才發(fā)起這次請求,等到請求返回之后再把鎖的狀態(tài)恢復回去。
頁面調(diào)用,在頁面的js文件中引用
import request from '../../request/request.js'
request(){
let data = {
params1:params1, //參數(shù)1
params2:params2, //參數(shù)2
}
request._get('http://192.168.1.30:8085/banner', data , res => {
console.log(res)
},err => {
console.log(err)
})
},
- 如果沒有請求參數(shù),把data換成null就好
小程序默認請求超時時間是60秒,等待時間有點長,我們可以在app.json中進行設(shè)置
{
//...
"networkTimeout": {
"request": 5000
}
}
每個頁面請求的時候都要引用封裝,還是有點麻煩。注意到小程序頁面都可以獲取app.js的實例(const app = getApp()),所以可以改一下封裝,將封裝方法直接暴露出去,在app.js中再配置POST/GET等請求;請求的url也可以抽出來寫在一起,方便查找和修改。自己試一下吧~
//覺得有用的話,點個喜歡再走嘛(不要臉.jpg)