/* 参数列表
* url 请求的地址后缀(必填)
* params 请求的参数(必填:如果没有参数,则传个空对象)
* onSuccess 请求成功的回调方法(选填)
* noData 请求成功但无数据的回调方法(选填)
* retry 请求自动重试的次数(选填)
* describe 请求的描述,用来提示错误信息(选填)
*/
function bpAjax(url, params, onSuccess, noData, retry, describe) {
plus.nativeUI.showWaiting();
var address = arguments[0];
var url = USERINFO.DL_HOST + arguments[0];
var onSuccess = arguments[2] ? arguments[2] : function() {};
var noData = arguments[3] ? arguments[3] : function() {};
var retry = arguments[4] ? arguments[4] : 3;
var params = params;
console.log(describe + '参数' + JSON.stringify(params));
if(!params.sign) params.sign = getRSA(params, describe) //当sign为空时,自动给键值排序生成sign
mui.ajax(url, {
data: params,
dataType: 'json', //服务器返回json格式数据
type: 'post', //HTTP请求类型
timeout: 10000, //超时时间设置为10秒;
success: function(data) {
plus.nativeUI.closeWaiting();
console.log(describe + '——' + data);
var d = JSON.parse(data);
if(d.msg == '1') {
onSuccess(d);
} else if(d.msg == '3') {
//localStorage.clear();
mui.toast(d.info);
onError('INVALID_TOKEN');
} else if(d.msg == '99'){
mui.toast(d.info);
}else {
noData(d);
}
},
error: function(xhr, type, errorThrown) {
plus.nativeUI.closeWaiting();
console.log(describe + '__' + errorThrown);
retry--;
if(retry > 0) return bpAjax(address, params, onSuccess, noData, retry, describe);
onError('FAILED_NETWORK', describe);
}
});
}
========================华丽的分隔线========================
/* 参数列表
* errcode 错误编码(必填)
* 可选值:'FAILED_NETWORK' 重连多次不成功网络不佳
* 可选值:'INVALID_TOKEN' 无效的token
*/
function onError(errcode, describe) {
switch(errcode) {
case 'FAILED_NETWORK':
mui.toast('当前网络不佳');
break;
case 'INVALID_TOKEN':
openWV('login.html');
break;
default:
console.log(describe + '——' + errcode);
}
}
========================华丽的分隔线========================
/* 需要RSA加密的对象,按对象键值排序加密 参数列表
* o参数为对象,
* 逻辑:需要RSA加密的对象,按对象键值排序加密,并返回
* DL_RED_PACKET 字符串是跟后台协定的
*/
function getRSA(o, describe) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey(USERINFO.DL_PUBLIC_KEY); //设置公有key
var keys = Object.keys(o).sort();
if(arguments.length <= 0) return false;
var str = '';
for(var i = 0; i < keys.length; i++) {
if(keys[i] != 'sign') {
str += o[keys[i]];
}
}
var sign = '';
str = encodeURI(str + 'DL_RED_PACKET');
for(var i = 0; i <= parseInt(str.length / 117); i++) {
sign += encrypt.encrypt(str.substr(i * 117, 117))
}
return sign;
}
3 个评论
要回复文章请先登录或注册
熊二的二
前端攻城师 (作者)
回梦無痕