【注】为什么要封装不用说,在学Hbuilder时,微吐槽”官方文档不方便查看”,很多需要借鉴和自我思考,能用调用就用原生api,使用js写,体验效果非常差。
【实现代码】
(function($, owner) {
owner.requestPost = function (data, callback){
owner.ajaxGetPostRequest(data.url, data, callback, 'post');
}
owner.createState = function(name, callback) {
var state = owner.getState();
state.account = name;
state.token = "token123456789";
owner.setState(state);
return callback();
};
/**
* 获取当前状态
**/
owner.getState = function() {
var stateText = localStorage.getItem('$state') || "{}";
return JSON.parse(stateText);
};
/**
* 设置当前状态
**/
owner.setState = function(state) {
state = state || {};
localStorage.setItem('$state', JSON.stringify(state));
//var settings = owner.getSettings();
//settings.gestures = '';
//owner.setSettings(settings);
};
var checkEmail = function(email) {
email = email || '';
return (email.length > 3 && email.indexOf('@') > -1);
};
/**
* 找回密码
**/
owner.forgetPassword = function(email, callback) {
callback = callback || $.noop;
if (!checkEmail(email)) {
return callback('邮箱地址不合法');
}
return callback(null, '新的随机密码已经发送到您的邮箱,请查收邮件。');
};
/**
* 获取应用本地配置
**/
owner.setSettings = function(settings) {
settings = settings || {};
localStorage.setItem('$settings', JSON.stringify(settings));
}
/**
* 设置应用本地配置
**/
owner.getSettings = function() {
var settingsText = localStorage.getItem('$settings') || "{}";
return JSON.parse(settingsText);
}
/**
* 封装nativeUI toast
* @param {String} message
*/
owner.toast = function (message){
if(message!=""){
var options = {
icon: "css/helloh5.jpg",
duration: "short",
align: "center",
verticalAlign: "bottom",
};
plus.nativeUI.toast(message, options);
}
}
/**
* 封装nativeUI alert
* @param {String} title
* @param {String} message
*/
owner.alert = function (title, message){
if(typeof message == 'undefined'){
message = title;
}
if(typeof title == 'undefined'){
title = '应用提示';
}
plus.nativeUI.alert( message, function(){
// 提示对话框关闭后的回调函数
}, title, "知道了" );
}
owner.checkLogin=function(){
var setting=owner.getSettings();
if(!setting.autoLogin){
owner.toLogin();
}
}
owner.toLogin = function(){
plus.webview.open('login.html', 'login', {}, 'slide-in-right', 200);
owner.toast("请先登录!");
}
/**
* ajax请求
* @param {String} url 链接
* @param {Object} data 数据
* @param {Function} callback 回调函数
* @param {String} type 请求类型:get/post
* @param {Int} retry 重试次数
*/
owner.ajaxGetPostRequest = function(url, data, callback, type, retry){
//todo 参数中加入deviceId, timestamp, token和sign验证,误差2分钟
mui.ajax(url,{
data: data,
dataType: 'json',
type: 'post',
timeout: 10000,
success: function(response){
console.log(JSON.stringify(response));
if(response==null || response==''){
console.log("no response");
}else{
owner.callback(response, callback);
}
},
error: function(xhr,type,errorThrown){
//owner.toast(owner.ajaxErrors(xhr));
if(typeof retry != 'undefined'){
retry--;
}else{
retry = 0;
}
if(retry > 0){
owner.ajaxGetPostRequest(url, data, callback, type, retry);
}else{
owner.toast(owner.ajaxErrors(xhr));
}
}
});
}
/**
* 统一回调函数
* @param {Object} response
* @param {Function} callbackFunc
*/
owner.callback = function (response, callbackFunc){
callbackFunc(response);
/*return;
response = response || {};
response.code = response.code || -1;
if(response.code < 0){
return false;
}else if(response.code == 0){
//success
//callbackFunc(response.data);
console.log(response.data);
return response.data;
}else{
//fail
console.log(response.error_desc);
return response.error_desc;
//owner.toast(response.error_desc);
}*/
}
//ajax错误描述
/**
* ajax错误描述
* @param {XmlHttpRequest} xhr
*/
owner.ajaxErrors = function(xhr){
var errorStr = "";
if(plus.networkinfo.getCurrentType() < 2){
//网络连接状态未知或未连接网络
errorStr = "网络连接异常,请稍候再试";
}else{
if(xhr.readyState==4 && xhr.status==0){
errorStr = "服务器连接异常,请稍候再试";
}else if(xhr.readyState==0 && xhr.status==0){
//timeout
errorStr = "服务器连接超时,请稍候再试";
}else if(xhr.readyState==4 && xhr.status==500){
//服务器错误
errorStr = "服务器错误500";
}else if(xhr.readyState==4 && xhr.status==404){
errorStr = "资源未找到:404";
}
}
return errorStr;
}
}(mui, window.app = {}));
【调用方法】
var userdata = {
url:Config.url,
key: Config.key,
method: 'loadRecord',
userkey:userkey,
keywords:keywords,
client:client,
staff:staff,
gclass:gclass,
pageSize:pageSize,
page:page
};
app.requestPost(userdata,function(response){//获取数据
var list=response.list;
//这里是服务器传回的数据
});