以最简单的登录为例,诠释JS面向对象的简单实例
JavaScript,是前端开发人员必须会的一门技术,从JS演变出来的有很多框架,先说说几个热门的框架吧:
JQuery:这个技术必须会,如果不会,那一定要会查api,知道怎么写,要看得懂英文文档,这个框架十分流行,不论是刚入坑的开发者还是老油条,其实也都是是需要会的
BackBone:这个技术还不错,曾经的项目中用到过多次,很方便,是个MVC的实用框架,用来渲染视图十分简便
AngularJS:是个MVVM框架,和JQuery完全不一样,JQuery是基于dom元素的,而angerlar却不是,很多从jquery过来的新手起初做angular会很不习惯
ReactJS:React是Facebook 的一个内部项目,自己写了一套来适用于自己公司的业务,其实很多公司都会这么做,因为市场上的框架普遍不适用自己,其实一般大公司都这样,后来他们自己的这套react十分好用,就开源了,react十分好用,性能也不错,代码逻辑相对来说也挺简单,所以很多人开始用,也有人说这是未来web的趋势
JQuery EasyUI:这是一个比较不错的框架,很轻便,用来开发后端管理系统再好不过了,提供了各种组件
ExtJS:这个就不多说了,刚出来的时候很牛,但是后来貌似收费了,这个我不清楚,我没用过,现在用这个框架的貌似有,可能不多,至少我接触到的项目都不用这个,要用也大多都是基于JQuery EasyUI
……还有很多各式各样的框架,如今前端正火,甚至还有很多前端游戏引擎的JS,十分强大,在这里就不多说了
好了,貌似有点废话了,那么入正题吧,写JS,其实也要面向对象,在08年小编我刚入坑工作的时候,JS并不受大家重视,甚至CSS都是让美工人员做的,现在已经大不一样,来看看一个简单的登录是如何用面向对象的方式做的吧:
先来看看登录页面的代码,十分简单,就是一个用户名和密码
<form id="loginForm" >
<input type="hidden" id="hdnContextPath" name="hdnContextPath" value="<%=request.getContextPath() %>"/>
<P>
<input class="ipt" type="text" name="username" placeholder="请输入用户名或邮箱" value="" />
</P>
<P>
<input class="ipt" id="password" type="password" name="password" placeholder="请输入密码" value="" />
</P>
<button type="submit">Login</button>
</form>
重头戏在js部分,我单独写了份login.js
var Login = function () {
// 登录Form
var formLoginValidation = function() {
var loginForm = $('#loginForm');
// 表单验证
loginForm.validate({
rules: {
username: {
required: true
},
password: {
required: true
}
},
messages: {
username: {
required: "登录用户名不能为空"
},
password: {
required: "登录密码不能为空"
}
},
submitHandler: function (form) {
var hdnContextPath = $("#hdnContextPath").val();
loginForm.ajaxSubmit({
dataType: "json",
type: "post", // 提交方式 get/post
url: hdnContextPath + '/login.action', // 需要提交的 url
data: loginForm.serialize(),
success: function(data) {
// 登录成功或者失败的提示信息
if (data.status == 200 && data.msg == "OK") {
window.location.href = hdnContextPath + "/index.action";
} else {
alert(data.msg);
}
}
});
// return false;
}
});
}
return {
// 初始化各个函数及对象
init: function () {
formLoginValidation();
}
};
}();
jQuery(document).ready(function() {
Login.init();
});
这是一个Login的对象,对象Login,formLoginValidation是这个对象中的属性,而这个属性是个function,主要两个作用,验证form以及登录成功后的跳转;最后这个Login对象返回一个init的函数,这个函数的作用是初始化对象中的所有方法
那么这个对象已经创建了,但是还没用,因为没有初始化,初始化必定是在dom完全加载完毕后
那么 Login.init()就行了
那么只要加入这段代码皆可以了,调用Login对象的init()方法,就可以初始化话所有对象函数,当然,有不同的属性都要写在init中,比如这样:
return {
// 初始化各个函数及对象
init: function () {
formDataDictValidation();
initDataDictTypes();
initDataDictTable();
}
};
最后来看一下action吧,这个是用shiro来实现的,这里就不多说了,以后会单独拿出来再说说,也有可能直接上视频
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public LeeJSONResult loginPost(String username, String password) { if (StringUtils.isBlank(username)) {
return LeeJSONResult.errorMsg("用户名不能为空");
}
if (StringUtils.isBlank(password)) {
return LeeJSONResult.errorMsg("密码不能为空");
}
Subject user = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(username, DigestUtils.md5DigestAsHex(password.getBytes()).toCharArray());
// 默认设置为记住密码,你可以自己在表单中加一个参数来控制
// token.setRememberMe(true);
try {
user.login(token);
} catch (UnknownAccountException e) {
return LeeJSONResult.errorMsg("账号不存在");
} catch (DisabledAccountException e) {
return LeeJSONResult.errorMsg("账号未启用");
} catch (IncorrectCredentialsException e) {
return LeeJSONResult.errorMsg("密码错误");
} catch (RuntimeException e) {
return LeeJSONResult.errorMsg("未知错误,请联系管理员");
}
return LeeJSONResult.ok();
}
最后的最后我来唠叨几句吧,前端对于后端开发人员来说也许是个坑,因为很多后端人员都不喜欢接触,其实不然,如今全栈工程师是趋势,尤其在国外,国内要成为全栈挺难,毕竟前端后端通吃的开发者少之又少,极品中的极品,而这样的牛人小编我认识一个,然后他已经去美国知名公司做开发多年!
作为后端人员,JS其实一定要会,那些页面的逻辑性脚本要会写,其次,jquery要能看懂,要能灵活运用,到最后,要去使用某个js插件的时候你就能灵活运用了,比如jqgrid啦,ztree啦,其实都是如出一辙。
以最简单的登录为例,诠释JS面向对象的简单实例的更多相关文章
- spring Boot 简单的登录功能,利用了jdbcTemplate.class完成sql语句的执行,无需service层、dao层和.xml文件
1.搭建SpringBoot项目首先我们先在IDEA上创建一个SpringBoot的Web项目(1)file ——> new ——> project——> Spring Initia ...
- Xamarin.Android再体验之简单的登录Demo
一.前言 在空闲之余,学学新东西 二.服务端的代码编写与部署 这里采取的方式是MVC+EF返回Json数据,(本来是想用Nancy来实现的,想想电脑太卡就不开多个虚拟机了,用用IIS部署也好) 主要是 ...
- Android破解学习之路(一)——简单的登录破解
最近突然心血如潮开始学了Android破解,初入门,便是将经验记录下来. 准备工作: 1.一个登录简单APP 在我们破解之前,我们需要做一个简单的登录APP,输入相应的账号与密码便是弹出登录成功的对话 ...
- Java结合SpringBoot拦截器实现简单的登录认证模块
Java结合SpringBoot拦截器实现简单的登录认证模块 之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章 ...
- SSM-MyBatis-01:IDEA的安装,永久注册和简单的MyBatis用例
一,IDEA的安装和永久注册 1.安装: 那到安装包,下一步,选路径,上面可以选操作系统64/32位,下面是程序的默认打开方式,可以不必勾选,也可以全选 路径一定不包含中文,重点 2.永久注册: 将此 ...
- 简单登录注册实现(Java面向对象复习)
简单登录注册的实现(面向对象的复习) 需求: 设计用户类,包含用户名和密码两个属性 设计LoginDemo类设计用户登录方法 用户有三次登录机会,如果连续三次登录失败则退出程序 功能实现页面: ...
- 【知了堂学习笔记】java web 简单的登录
最近皮皮潇在学习java web,刚接触了简单的东西,所以今天给大家带来一个简单的登录实现. 页面: 页面代码: <%@ page language="java" conte ...
- iOS登录单例
iOS登录单例 一,工程图. 二,代码. UserInfo.h #import <Foundation/Foundation.h> @interface UserInfo : NSObje ...
- JSP简单实现登录和注销
JSP简单实现登录和注销 需求:用户登录成功后跳转到欢迎页面 用户登录失败跳转到初始的登录界面 用户点击注销,用户退出登录状态需要重新登录 登录页面的JSP代码: <%@ page langua ...
随机推荐
- [deviceone开发]-viewShower和listView
一.简介 viewshower里嵌套listview,实现复杂的列表效果. 二.效果图 三.相关下载 http://source.deviceone.net/source-detail.html?do ...
- [deviceone开发]-echart的简单报表示例
一.简介 echart是一个常用的基于h5的报表库.这个例子简单展示了实现折线图,柱状图,圆环图和圆饼图的使用. 并实现和do的非html部分的数据交互. 二.效果图 三.相关下载 https://g ...
- OS X EI Capitan 系统 安装cocoapod
没有废话直接上步骤 (哪一步卡住了 多试几次 可能是网络不好的缘故) 1. 首先安装 home-brew 以下方法转自:http://www.cnblogs.com/lzrabbit/p/4 ...
- iOS界面传值的方式(7种)
iOS传值的方式 属性传值 方法传值 代理传值(delegate) block传值 单例模式方式 通知notification方式 UserDefault或者文件方式 1.属性传值 情况:A页面跳转到 ...
- App 即时通讯 SDK
1.网易云信 http://netease.im/ 2.环信 http://www.easemob.com/customer/im 3.融云 http://www.rongcloud.cn/ 4.极光 ...
- 认识Activity,创建第一个android应用-Hello Word
2016-04-05 配置好Java.eclipse和Android环境就花费了一天时间.下载SDK真是费了不少时间.现在终于找到解决SDK更新的好方法了(更新自己电脑上的hosts文件,就可以使用G ...
- Safari 快捷键
标签和网页导航快捷键 8 个 切换到下一个标签页 – Control+Tab 切换到上一个标签页 – Control+Shift+Tab 向下滚动一屏 – 空格 向上滚动一屏 – Shift+空格 焦 ...
- 基于ruby的watir自动化测试 笔记一
基于Ruby的watir-webdriver自动化测试方案与实施(五) 基于Ruby的watir-webdriver自动化测试方案与实施(四) 基于Ruby的watir-webdriver自动 ...
- 世道变了 – 你愿意成为微软认证Linux工程师吗?
随笔世道变了 – 你愿意成为微软认证Linux工程师吗? 世道变了 – 你愿意成为微软认证Linux工程师吗? leixu十二月 14, 2015随笔 2015年12月9日,微软发布了全新的MCS ...
- EMC Documentum DQL整理(四)
1.List files and folder in specified folder pathSELECT DISTINCT s.object_name, fr.r_folder_path FROM ...