发表于: 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




返回列表 返回列表
评论

    分享到