版本一
思路是在页面中指定位置预留一个js钩子, 然后在页面加载完成后向后端发送ajax请求, 判断用户是否登录, 并写到钩子里相应文本. 于是版本一产生了...
代码如下 | 复制代码 |
(function($){ var user = window.user = {}; // 用户数据 // 用户状态, 0未登录, 非0则视为已登录, 可扩展为用户等级 /** $.get("后端url", function(res){ //渲染状态到页面 //模拟惰性方法以防止页面多次使用 return user; /** return user; /** if(user.status !== 0){//已登录 $("#J_bar_html").html(html); $("#J_set_fav").on("click", function(){ |
版本二
于是页面中可能需要判断用户是否登录, 还有退出登录, 在版本一的基础上添加 检查和退出方法, 但这些退出和检查只是依据后端的返回值, 且退出只是前端静态退出, 当然你也可以向后端发送ajax
代码如下 | 复制代码 |
/** * 前端退出 * @return {object} user对象 */ user.exit = function(){ user.status = 0; user.data = {}; user._renderHTML();//重置下页面状态 return user; } /** |
经过以上代码后前端的登录退出就基本完成了, 但由于每次都要请求后端, 而这个请求是异步的, 如果返回响应时间过长, 那么在这个时间段使用 user.login, user.check 是不正确的, 因为是在ajax完成后才能正确的设置用户的登录状态, 这也好比domReady事件一样, dom树都没有建立成功就使用dom对象了, 就报错了啊... 于是她有domReady, 咱有userReady...于是版本三产生了...
版本三
在版本二的基础上添加 ready 事件, 确保必须在用户初始完成后才执行代码...
代码如下 | 复制代码 |
var isReady = false,//用户是否初始完毕 readyList = [];//初始化回调列表 /** /** return user; /** isReady = true;//设置为已经初始完毕 |
这样来使用以确保必须在用户判断结束后才绑定事件, 从而解决误判断带来的用户体验丢失:
代码如下 | 复制代码 |
<a href="javascript:;" id="J_set_fav">点击收藏</a> <script type="text/javascript"> user.init();//初始化用户 user.ready(function(){ if(user.check()){alert("已登录");} else {alert("未登录");} $("#J_set_fav").on("click", function(){ user.login(function(){//回调必须是登录状态下使用, 如果没有登录会执行画出登录框让用户登录 alert("正在收藏"); }); }); }); </script> |
整个前端登录, 退出大概架构就是这样了, 当然还可以对接第三方登录, 注册等方法. 还可以扩展出一些用户相关的操作, 如: 收藏啊, 添加关注啊等等.
注: 只是代码思路, 具体代码可优化, 可精简, 且跟据实际情况订制不同的功能.