微信小程序使用 wx.request(Object object)发起 HTTPS 网络请求,所以在封装之前我们需要了解request的参数,见下图
1、创建一个js文件,建立_get方法,传几个参数;
function _get(url, data, successf, fail, complete){
// successf 成功回调函数
// fail 失败回调
//complete 结束回调,不论成功还是失败都会进这里
}
一般我们使用post,get请求,所以这里封装了三种,post根据header的设置封装了两种,
data 参数说明
最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:
对于 GET 方法的数据,会将数据转换成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
对于 POST 方法且 header['content-type'] 为 application/json 的数据,会对数据进行 JSON 序列化
对于 POST 方法且 header['content-type'] 为 application/x-www-form-urlencoded 的数据,会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
2、一般来说,请求都需要带上用户的信息,这里以token为例,保存在app.globalData.userInfo里,给传过来的data新增属性值,统一处理。
function _get(url, data, successf, fail, complete, type){
data.token = app.globalData.userInfo ? app.globalData.userInfo.token:'';
}
3、值得注意的是,这个请求成功回调,只要你的wx.request成功发出了请求,无论返回什么http状态码,都会走success;
反之出现问题,比如说断网,域名解析有问题,或者尤其是我们去调用restful api时,可能会在url格式,参数类型上出些问题,这些情况下才会调用到fail。
所以success时要判断statusCode==200才是我们理解的成功,如果返回的对象里也有状态码的话,也可以在判断一层
success(res) {
if (res.statusCode == '200') {
if(res.data.status == 0){
successf(res);
}else{
//做一些错误的处理
wx.showToast({
title: res.data.msg,
icon: 'none',
duration: 1500
});
}
} else {
wx.showToast({
title: res.statusCode,
icon: 'none',
duration: 1500
});
};
},
另外在请求的时候我们也不会整个url全部写出来,会封装一个文件,调用名称就行,如下:
const host = 'https://***';
module.exports = {
login: host + '/your/address',
phoneBind: host + '/wx/****',
};
在js中使用:
const config= require('../../utils/config.js');
let login = config.login
完整代码可以看GitHub,点这里