目标
在Spring-mvc项目中,希望 可以实现传递一个对象到后台,并且可以接受到后台传来的数据这样的功能,采取的方式是ajax。
实现方法
- ajax代码
<script type="text/javascript" language="javascript">
var boolstoreName=false;
var boolpassWord=false;
function check(){
var un = document.getElementById("username").value;
var pwd = document.getElementById("password").value;
if(un.length==0&&pwd.length==0){
alert("用户名和密码都为空");
return;
}
if(un.length==0){
alert("用户名为空");
return;
}
if(pwd.length==0){
alert("密码为空");
return;
}
var pwd_md5=hex_md5(pwd);
$.ajax({
cache: false,
async: false,
type: "POST",
dataType: "json",
data: {
"username": un,
"password": pwd_md5
},
url: "Check",
success: function(data) {
var backdata=JSON.parse(data); //传回的是json字符串,要先把它转换成js中的类对象,
alert("success");
if("ok"==data.check_type) {
boolpassWord = true;
}else{
divpassword.innerHTML='<font color="red" style="text-align:center">用户名和密码不匹配!</font>';
boolpassWord=false;
}
},
error : function(XMLHttpRequest,textStatus,errorThrown) {
alert("error方法");
divpassword.innerHTML='<font color="red" style="text-align:center">用户名和密码---不匹配!</font>';
boolpassWord = false;
}
});
if(boolpassWord==false){
return;
}else{
document.getElementById("password").value=pwd_md5;
document.loginForm.submit();
}
}
</script>
- form表单代码(jsp)
<form:form method="POST" modelAttribute="user" action="loginAction" class="m-form m-form-ht n-login" id="loginForm" name="loginForm" onsubmit="return false;" autocomplete="off" >
<div class="fmitem">
<label class="fmlab">用户名:</label>
<div class="fmipt">
<form:input class="u-ipt" type="username" name="username" id="username" path="username"/>
</div>
</div>
<div class="fmitem">
<label class="fmlab">密码:</label>
<div class="fmipt">
<form:input id="password" class="u-ipt" type="password" name="password" path="password"/>
<span class="tips" id="divpassword"></span>
</div>
</div>
<div class="fmitem fmitem-nolab fmitem-btn">
<div class="fmipt">
<button type="submit" class="u-btn u-btn-primary u-btn-lg u-btn-block" onClick="check()">登 录</button>
</div>
</div>
</form:form>
- 后台代码
@RequestMapping(value = "/Check", method = { RequestMethod.POST })
@ResponseBody
public String Check(@ModelAttribute User user) {
System.out.println("Check方法");
User buy_user = new User();
buy_user.setUsername("and");
buy_user.setPassword("794aad24cbd58461011ed9094b7fa212");
User salle_user = new User();
buy_user.setUsername("but");
buy_user.setPassword("64c9ac2bb5fe46c3ac32844bb97be6bc");
boolean falg = false;
if (user.getUsername().equals(buy_user.getUsername())
&& user.getPassword().equals(buy_user.getPassword())) {
// 买家的信息确认
falg = true;
} else if (user.getUsername().equals(salle_user.getUsername())
&& user.getPassword().equals(salle_user.getPassword())) {
// 卖家的信息确认
falg = true;
}
// 验证用户名和密码的时候如果没有发现此用户,可以返回一个error json错误给ajax,这样就可以使其跳转到ajax的error方法里。
Map<String, String> map = new HashMap<String, String>();
map.put("check_type", "ok");
// 上面的map不是json当然是不可以用于返回的,于是呢我们要把它搞成json字符串,你也可以自己去拼json字符串。
JSONObject json = JSONObject.fromObject(map);
if (falg) {
check_return = json.toString(); // 正确就将json 字符化
} else {
map.put("check_type", "false");
json = JSONObject.fromObject(map);
check_return = json.toString();
}
System.out.println("json----:" + getCheck_return());
return check_return;
}
总结
这个方法是可以实现的,亲测有效,网上有好多代码都有问题,尝试了很多次才找到一个有效的方法,希望可以帮助有需要的人,一天一个坑,天天坑快乐。