发表于: 2018-02-01 23:25:24
3 557
今天完成的事:
1、短信获取验证码注册
前端获取验证码
<script type="text/javascript">
function sendCode() {
var data={
tel:$("#tel").val()
}
$.ajax({
type: "post", //以post方式与后台沟通
url :"/task4-1/register/code", //与此页面沟通
dataType:JSON,//返回的值以 JSON方式 解释
data: data, //发给的数据
success: function() {//如果调用成功
alert("验证码获取")
}
}
)
}
</script>
后台判断验证码是否正确
@RequestMapping(value = "/register/code", method = RequestMethod.POST)
// @ResponseBody
public String code(HttpServletRequest request,String tel) {
logger.info("进入发送验证码的方法");
// 获取手机号
logger.info("获取的手机号是:" + tel);
// 产生一个四位的随机数
Random random = new Random();
int code1 = random.nextInt(900000) + 100000;
logger.info("产生的六位验证码是:" + code1);
String code = String.valueOf(code1);
// 将随机数发送给手机
userService.testMobile(tel, code);
// 将验证码保存在session中
HttpSession session = request.getSession();
session.setAttribute("code",code);
return null;
}
2、提交表单前校验
失去焦点触发事件
代码
<script type="text/javascript">
$(document).ready(function() {
//给账号文本框绑定失去焦点的事件
$("#username").blur(function(){
//alert("测试"+$(this).val());
$.ajax({
url:"/task4-1/register/checkName",//设置服务器地址,即为servlet配置的url-pattern
type:"post",//提交的方式
data:{username:$(this).val()},//提交到服务器的数据,多个值以逗号分割开{account:$(this).val(),...}
success:function(data){//回调函数,data是返回的数据
$("#errorUsername").html(data);
}
});
});
});
</script>
后端
@RequestMapping(value = "/register/checkName", method = RequestMethod.POST)
public String getVerify( HttpServletResponse response,String username) throws IOException {
System.out.println("通过失去焦点进入方法");
System.out.println(username);
// User user = userService.selectUserByName(username);
User user = userService.selectUserByName(username);
boolean b = user!=null;
System.out.println(b);
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter out= response.getWriter();
if(b){
System.out.println("===账号存在");
out.println("<font color='red'>该帐号已经存在,请重新输入!</font>");
}else{
System.out.println("==账号不存在");
out.println("<font color='green'>恭喜您,该帐号可以使用!</font>");
}
return null;
}
发现一个小bug
3、ajax回调函数执行
问题描述:点击获取验证码的按钮后,方法执行则弹窗内容是“发送验证码成功”,方法执行失败则弹窗内容为“发送验证码失败”,但是目前是可以进入到后台方法中,但是无法跳出弹窗。
1、后台返回json数据,在前台页面判断,不用@ResponseBody
function test1() {
$.ajax({
// asynch:false,
type: "post", //以post方式与后台沟通
url :"/task4-1/aaaa", //与此页面沟通
dataType:"json",//返回的值以 JSON方式 解释
// data: data, //发给的数据
success: function(json) {//如果调用成功
if (json.i<1){
alert("返回的是a")
}else {
alert("返回的是b")
@RequestMapping(value = "/aaaa", method = RequestMethod.POST)
public void test(HttpServletResponse httpServletResponse) throws IOException {
System.out.println("进入测试弹框方法");
int i=10;
Map map=new HashMap();
map.put("i" ,i);
String json = JSONObject.fromObject(map).toString();
//将数据返回
httpServletResponse.setCharacterEncoding("UTF-8");
httpServletResponse.flushBuffer();
httpServletResponse.getWriter().write(json);
httpServletResponse.getWriter().flush();
httpServletResponse.getWriter().close();
}
2、后台返回text数据,在后台做判断,使用@ResponseBody
function test2() {
$.ajax({
// asynch:false,
type: "get", //以post方式与后台沟通
url :"/task4-1/12345", //与此页面沟通
dataType:"text",//返回的值以 JSON方式 解释
// data: data, //发给的数据
success: function(a) {//如果调用成功
if (a=="a"){
alert("返回的是a")
}else {
alert("返回的是b")
@RequestMapping(value = "/12345", method = RequestMethod.GET)
@ResponseBody
public String test() {
System.out.println("进入第二测试方法");
int i=1;
if(i>0){
return "a";
}else{
return "b";
}
}
关于@ResponseBody的理解之前有偏差
@ResponseBody:
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
遇到的困难:
1、ajax中返回的数据类型dataType应该是“json”或者“text”,或者单引号
之前博客中是大写,所以一直出错,没想到是这个原因
dataType:JSON,//返回的值以 JSON方式 解释
2、将普通的数据转换为json格式
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
Map map=new HashMap();
map.put("i" ,i);
String json = JSONObject.fromObject(map).toString();
【未解决】
“”,“ “,null三者的区别
明天计划
七牛云图片上传
收获:
1、ajax异步请求,将数据转换为json数据,ajax回调方法,@ResponseBody
2、String去掉空格的方法,str.trim()去掉首尾空格,str.replaceAll(" ","")去掉所有空格
3、==是完全相等,值和对象都相等, equals是值相等
String e ="eee";String f ="eee";
e==f true
e.equals(f) true
String c = new String("aa");String d = new String("aa");
c==d false
c.equals(d) true
评论