处理请求成功
当网络操作成能,也就是能连上服务,调用接口获得到返回的数据,就会调用 success 方法。
success: function (res) {
//网络成功
}
至于服务器业务逻辑是否成功就不知道了,所以接下来就要判断业务是否成功。
之前说过,服务器返回的结果有统一的JSON外壳,就可以用JSON外壳的retCode 来判断。如果retCode == 0 代表成功。通过定义getResultData 方法,用该方法的返回值来判断业务是否成功。
wx会自动将返回的JSON解析为json对象,不需要自己解析。
function getResultData(res) {
//网络错误
if (res.statusCode != 200) {
return;
}
//服务器返回 null
var data = res.data;
if (!data) {
return;
}
//服务器返回数据处理
if (data.retCode == 0) {
//返回的正确数据
return data.data;
}
}
- res 为wx api返回的数据
- res.statusCode 代表网络的状态码
- res.data 为服务器返回的数据。如果data.retCode == 0 代表业务成功,就可以取出真正的业务数据了。
具体调用逻辑如下:
success: function (res) {
var data = getResultData(res);
if (data) {
//请求成功
wx.hideLoading();
req.success(data);
}else{
//失败
}
}
req.success(data); 为调用 req 的success() 方法,将成功的结果回调回去。
所以req 对象中,必须有 url 字符串,data 对象 ,success 方法
处理失败业务逻辑
这里失败的逻辑与之前处理失败的逻辑相似,将错误的信息toast给用户即可。也可以处理其他的错误码逻辑。
//上接前面success()方法的else
else if (getResultCode(res) == -401) {
//处理 -401
relogin(req);
} else {
wx.hideLoading();
handleError(res);
if (isHostMethod(req, "fail")) {
req.fail();
}
- 这里的 -401 是token过期的错误码。一般过期后重新登录即可。如何登录以后再说。
- handleError(res) 是对服务器返回的错误信息进行toast提示,具体如下:
function handleError(res) {
//网络错误
if (res.statusCode != 200) {
showErrorToast("[" + res.statusCode + "]异常");
return;
}
//服务器返回 null
var data = res.data;
if (!data) {
showErrorToast();
return;
}
//服务器返回数据处理
if (data.retCode == 0) {
//返回的正确数据
return data.data;
} else if (data.msg) {
//返回的错误信息
showErrorToast(data.msg);
} else {
//处理错误
showErrorToast();
}
}
- isHostMethod() 是判断 req 对象是否含有 ‘fail'方法,这个方法是选填的。有的话,将网络失败回调过去,没有则不处理。
req对象可以有fail()方法也可以没有,主要为了处理一些loading逻辑。
function isHostMethod(object, property) {
var t = typeof object[property];
return t == 'function' || (!!(t == 'object' && object[property])) || t == 'unknown';
}