【Hbuilder】封装的网络请求代码

8 篇文章 0 订阅
2 篇文章 0 订阅

【注】为什么要封装不用说,在学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;
                            //这里是服务器传回的数据
          });

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智商不够_熬夜来凑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值