(近期有时间,也饿,接点小型微信小程序私活填肚子)
建议封装自己的HTTP请求,使用方便并且多少可以减少代码量:
function HttpRequst(loading, url, sessionChoose, sessionId, params, method, ask, callBack) {
if (loading == true) {
({
title: '数据加载中',
icon: 'loading'
})
}
var paramSession = [{},
{
'content-type': 'application/json',
'Cookie': 'JSESSIONID=' + sessionId
},
{
'content-type': 'application/json'
},
{
'content-type': 'application/x-www-form-urlencoded',
'Cookie': 'JSESSIONID=' + sessionId
},
{
'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
'Cookie': 'JSESSIONID=' + sessionId
}
]
({
url: baseUrl + url,
data: params,
dataType: "json",
header: paramSession[sessionChoose],
method: method,
success: function(res) {
(res);
();
if (loading == true) {
();
}
if ( == true) {
wxLogin2(loading, callBack);//在此做自己的
}
if ( != true) {
callBack();
}
},
complete: function() {
if (loading == true) {
();
}
}
})
}
我们可以在能够使用 HttpRequst 的地方很简单的发出请求,并预定callback函数:
(true, "house/", 4, ("sessionId"), params, "POST", false, _this.sthAfterReport);
利用微信提供的API—getSession,我们可以在小程序端对session过期做相应处理,这可以解决用户注销并切换用户登录的时候,系统需要更新用户的问题:
在-onLaunch()方法中:
({
success: function (res) {
("处于登录态");
(('sessionId'));
},
fail: function (res) {
('sessionId');//在此可以在用户切换登录的时候,将保存在缓存中的session信息删除.
("处于非登录态");
}
})
在后端我们可以对请求进行拦截,针对不同的框架有不同的实现方法,这里以后端请求filter为例:
/*
*当小程序端接收到needLogin == true的标记时,触发()方法,在后端login方法中,将user信息加入session中并将sessionId传回小程序端保存,可以通过()方法保存到微信端缓存当中.
*若session中存在user信息,则可以继续进行请求的操作.
/
User user = (User)().getAttribute("user");
if(null == user){
("needLogin", true);
return res;
}
//后端login.
("sessionId", ().getId());
//前端login.
('sessionId', );
大致流程汇总说明:
新用户初次登录,小程序端----发送https-request----->服务端.
filter获取user为空,返回needLogin为true的标识.
小程序端调用().
服务端将session信息放到response.
小程序端将session信息保存到缓存.
小程序端之后的request调用,都在request里附加session信息.
服务端根据session信息取出user对象,进行后续操作.