springmvc下js控制表单提交(表单提交前检验,提交后获取json返回值)
这个问题我搞了四天,终于搞懂。因为对js很不熟悉。郁闷的是后台代码出错总可以设置断点调试,前端js代码出错只能通过浏览器提供一些运行数据来分析,很不习惯。
首先说下逻辑:这是一个注册功能,我希望,注册前端表单提交后,后台处理后,返回一个json数据,前端用jquery接收,并弹出弹框显示是否注册成功以及提示信息。
所以首先可以,写出后端代码:
/**
* @ClassName: RegisterController
* @Description: Register CONTROLLER类
* @author 无名
* @date 2016-4-25 下午2:54:41 2016-05-01返回注册提示信息
* @version 1.0
*/
@Controller
@RequestMapping("/register")
public class RegisterController
{
@Resource(name = "userServiceImpl")
private UserService userService; @RequestMapping(value = "/show", method = RequestMethod.GET)
public String show()throws Exception
{
return "registerPage";
} @RequestMapping(value = "/submit", method = RequestMethod.POST)
@ResponseBody
public String submit(User user,String repassword) throws Exception
{
JSONObject jo = new JSONObject();
if(null == user || StringUtil.isStringEmpty(repassword))
{
setJOWhenIputWrong(jo);
return jo.toJSONString();
}
RegisterMessage registerMessage = checkUserInfor(user,repassword);
setJSONObject(jo,registerMessage);
if(!registerMessage.isSuccess())
{
return jo.toJSONString();
}
userService.save(user);
return jo.toJSONString();
} private RegisterMessage checkUserInfor(User user,String repassword)
{
RegisterMessage registerMessage = new RegisterMessage();
List<User> users = userService.findByUserName(user.getUsername());
if(!users.isEmpty())
{
registerMessage.setSuccess(false);
registerMessage.setReturnMessage("This username has been existing!");
return registerMessage;
}
if(!user.getPassword().equals(repassword))
{
registerMessage.setSuccess(false);
registerMessage.setReturnMessage("The passwords you inputed are different!");
return registerMessage;
}
registerMessage.setSuccess(true);
registerMessage.setReturnMessage("You have been the new member of RiXiangBlog!");
return registerMessage;
} private void setJSONObject(JSONObject jo,RegisterMessage registerMessage)
{
jo.put("success", registerMessage.isSuccess());
jo.put("returnMessage", registerMessage.getReturnMessage());
} private void setJOWhenIputWrong(JSONObject jo)
{
jo.put("success", false);
jo.put("returnMessage", "input wrong!");
}
}
可以看出/show路径下是注册页面,注册表单填写后提交,请求路径/submit。
@ResponseBody这个注解很关键,它意味着spring将这个方法标示为返回数据而不是页面路径。
处理好后端后,就是前端的jquery的问题。之前我走入误区。form表单的submit按钮点击后就会请求/submit路径,然后我写$.ajax()方法试图获取。而这个方法会按照写好的url去再请求/submit路径。所以等于是请求了两次/submit路径,且第二次是没有提交信息的请求。
所以需要做的是,利用jquery来控制表单的提交。然后获取返回结果。在处理函数中解析json。
jquery控制表单提交需要额外的jquery库。jquery.form.js
http://malsup.com/jquery/form/#download
最后我的前端代码如下:
<script type="text/javascript" src="<%=basePath %>Jquery/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="<%=basePath %>Jquery/jquery-form.js"></script>
<script type="text/javascript">
$().ready(function()
{
$('#registerForm').ajaxForm(function(data)
{
var parsedJson = $.parseJSON(data);
if(parsedJson.isSuccess == true)
{
alert("注册成功"+" " + parsedJson.returnMessage);
}
else
{
alert("注册失败"+" " + parsedJson.returnMessage);
}
});
}); </script>
2016.12.01补充:
hh,之前还是太嫩了。那时还不懂得前端表单提交前校验。用jquery很容易实现。
需要的是控制整个提交过程,提交前验证,提交后获取后端返回的json返回值。
$(document).ready(function() {
$('#passwdForm').ajaxForm({
dataType: 'json',
beforeSubmit: validate,
success: successFunc
});
});
function validate(formData, jqForm, options) {
if (!formData[0].value) {
alert("旧密码不能为空!!(;¬_¬) ( ´◔ ‸◔`) (눈_눈) ( ∙̆ .̯ ∙̆ ) (;¬д¬) (“▔□▔)");
return false;
}
if (!formData[1].value) {
alert("新密码不能为空!!π__π T.T ε(┬┬_┬┬)3 ╥﹏╥ ┬_┬ (╥╯^╰╥)");
return false;
}
if (!formData[2].value) {
alert("请再次输入密码!! ԅ(¯﹃¯ԅ) (¯﹃¯)");
return false;
}
if (formData[1].value != formData[2].value) {
alert("两次密码输入不一致!!(,,•́ . •̀,,) (๑•́ ₃•̀๑) (๑•́ ₃ •̀),,Ծ‸Ծ,,");
return false;
}
if (formData[1].value.length < 6) {
alert("密码长度至少6位!! (:3[▓▓] (:3[▓▓▓▓▓▓▓▓▓] (¦3[▓▓]");
return false;
}
var queryString = $.param(formData);
return true;
}
function successFunc(data) {
if (data.success) {
alert("修改密码成功"+" " + data.returnMessage);
location.href = "/RiXiang_blog/space/list.form";
}
else {
alert("修改密码失败"+" " + data.returnMessage);
}
}
上述代码,$('#passwdForm').ajaxForm({ dataType: 'json',beforeSubmit: validate, success: successFunc});的写法是使用了jquery的,ajaxForm方法,接受一个参数。对象结构。规定了是json数据结构,验证方法为validate,返回值判断方法为successFunc。此外就没什么可多说的了。
具体可以看看《锋利的JQUERY》一书,写的足够详细。
springmvc下js控制表单提交(表单提交前检验,提交后获取json返回值)的更多相关文章
- js控制页面显示和表单提交
早期的web页面在显示方面一般在后台进行控制,虽然对后台开发来讲是比较容易做到的,但是涉及到一个问题,那就是数据库压力. 因为要控制显示,所以会比较频繁的从数据库中来回调用. 现在的js功能越来越强, ...
- js控制某个div在页面加载完成5秒后隐藏
<div id="k">测试</div><script>setTimeout("document.getElementById('k' ...
- Kindeditor为什么提交后获取不到值
LinkButton不是表单提交方式所以获取不到.如果用button submit提交方式就是form提交方式后台就能获取到值 取得编辑器的HTML内容.KindEditor的可视化操作在新创建的if ...
- JMeter使用JSON Extractor插件实现将一个接口的JSON返回值作为下一个接口的入参
##补充## 接口响应数据,一般为JSON,HTML格式的数据. 对于HTML的响应结果提取,可以使用正则表达式,也可以通过XPath来提取:对于JSON格式的数据,可以用正则表达式,JSON Ext ...
- 编写一个js函数,该函数有一个n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的整数,且整数取值范围是[2,32]
首先定义个fn用来返回整数的取值范围: function getRand(a,b){ var rand = Math.ceil(Math.random()*(b-a)+a); return rand; ...
- js获取json属性值的两种方法
1.json.XXX 2.json["XXX"] 第二种方法使用场景,当属性值是变量时.如图所示:
- JS 获取JSON返回的时间值转换为通常格式展示
var date = new Date(parseInt(数据源.slice(6))); //获取到时间 年月日时分秒 var result = date.getFullYear() + '/' ...
- js 节点 document html css 表单节点操作
js 节点 document html css 表单节点操作 节点操作:访问.属性.创建 (1)节点的访问:firstChild.lastChild.childNodes.parentChild(父子 ...
- 获取form表单默认提交的返回值
1.经常用form表单提交的小伙伴有没有发现,form表单默认的提交是没有返回值的,而且默认提交成功之后是跳转,跳转的action的路径,下面写一下默认的提交如何获取到form表单的返回值json,并 ...
随机推荐
- cocos2dx的build_win32.dat出现问题以及install-template-msvc.dat出现.js没有脚本引擎
关于cocos2dx-2.x.x版本当中出现build_win32.bat执行失败 (针对VS2013)应当在VS的安装路径查找msbuild的文件夹,再其中查找msbuild.exe文件找到四个东西 ...
- 【洛谷·P2320】鬼谷子的钱袋
这道题很神奇 我们举一个例子,m=12 那么我们可以把它分成两部分,L和R: (1,2,,6)(7,8,,12) 我们可以发现R中的数都可以由12/2和左边的数组合得到 那么我们对L再分------ ...
- nodejs之异步思想
nodejs的精髓就是"异步",但什么是异步呢?我们来看一个例子: var start =new Date; setTimeout(function(){ var end =new ...
- 电子数字 网易游戏在线笔试 第一题 hihocoder
题目链接 http://hihocoder.com/contest/ntest2016spring1/problem/1 这个题目有几个算法考点: (1)对于一个LED数码管(由7个发光二极管封装在一 ...
- LINUX 虚拟机克隆与网络配置
虚拟机克隆后,启动之后发现网卡没有启动.发现提示错误信息“Device eth0 does not seem to be present, delaying initialization.” 解决方法 ...
- 洛谷P1330 封锁阳光大学
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- android5.1 for tq335x
万万没有想到再次编译aosp已经是半年以后了,未完的工作总是要继续进行的. aosp不是通过repo下载的,而是在百度网盘里面找了网友的分享下载的.然后编译的方法直接挂个vpn到谷歌的官网上去看需要什 ...
- 第57讲:Scala中Dependency Injection实战详解
本讲我们来学习下依赖注入.让我们从代码出发: package scala.learn trait Logger {def log (msg:String)}trait Auth { auth:Log ...
- 打印文本中的所有单词,并且打印每个单词出现的行号,非实义单词不考虑(TCPL,练习6-3)
建立一棵二叉树,每个接单存放单词以及指向一个链表的指针,以及指向左右节点的指针.链表内存放行号以及指向下一个链表节点的指针. 每录入一个单词,先寻找二叉树,再寻找它的链表,分别将单词和行号插入二叉树和 ...
- JavaScript + HTML 虚拟键盘效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...