JSON与AJAX的简单使用

在这里记录一下json与ajax的使用方法与需要注意的事项

JSON

  • 首先,使用ajax之前需要先对json有所了解:
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。
  • json是使用键值对的方法来储存数据的
    列如:
{"name": "张三"}
{"age": "18"}
  • JSON 是 JavaScript 对象的字符串表示法,本质是一个 字符串 。
  • 在js中,JSON 和 js 对象互转
<script type="text/javascript">
   //定义一个对象
   var user = {
       name:"张三",
       age:18
  };
   //将js对象转换成json字符串
   var str = JSON.stringify(user);
   
   //将json字符串转换为js对象
   var userStr = JSON.parse(str);

</script>

环境搭建

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.1</version>
</dependency>
  • 编写配置springMVC配置文件,加上解决中文乱码配置
<mvc:annotation-driven>
   <mvc:message-converters register-defaults="true">
       <bean class="org.springframework.http.converter.StringHttpMessageConverter">
           <constructor-arg value="UTF-8"/>
       </bean>
       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
           <property name="objectMapper">
               <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                   <property name="failOnEmptyBeans" value="false"/>
               </bean>
           </property>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven>

JSON简单使用

  • 编写一个user用户实体类
public class User {

   private String name;
   private int age;
   private String sex;
   // 以下为构造方法,get和set方法,toString方法。。。 
}
  • 编写一个Controller
    注意事项:
    以下编写了3种方法

    1.实体对象转换JSON字符串格式,返回前端
    2.后端返回一个集合,返回前端
    3.后端返回时间并处理,且去除时间戳转换,返回前端
// 或者使用@RestController注解,如果使用@RestController注解,则下列所有方法无需再添加@ResponseBody注解
@Controller
public class UserController {

   // 将后台实体对象转换成JSON字符串返回给前端
   @RequestMapping("/json1")
   @ResponseBody
   public String json1() throws JsonProcessingException {
       // 1、创建一个jackson的对象映射器,用来解析数据
       ObjectMapper mapper = new ObjectMapper();
       // 2、创建一个用户对象
       User user = new User("张三1", 18, "男");
       // 3、将我们的对象解析成为json格式
       String str = mapper.writeValueAsString(user);
       // 4、由于@ResponseBody注解,这里会将str转成json格式返回;十分方便
       return str;
    }

    // 返回一个List集合
    @RequestMapping("/json2")
    @ResponseBody
    public String json2() throws JsonProcessingException {

       //创建一个jackson的对象映射器,用来解析数据
       ObjectMapper mapper = new ObjectMapper();
       //创建一个对象
       User user1 = new User("张三1号", 18, "男");
       User user2 = new User("张三2号", 18, "男");
       User user3 = new User("张三3号", 18, "男");
       User user4 = new User("张三4号", 18, "男");
       List<User> list = new ArrayList<User>();
       list.add(user1);
       list.add(user2);
       list.add(user3);
       list.add(user4);

       //将我们的对象解析成为json格式
       String str = mapper.writeValueAsString(list);
       return str;
    }

    // 从后端生成一个当前时间,并返回至前端
    @RequestMapping("/json3")
    @ResponseBody
    public String json3() throws JsonProcessingException {

       ObjectMapper mapper = new ObjectMapper();

       //不使用时间戳的方式
       mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
       //自定义日期格式对象
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       //指定日期格式
       mapper.setDateFormat(sdf);

       Date date = new Date();
       String str = mapper.writeValueAsString(date);

       return str;
    }
}

AJAX

  • 这里直接使用jQuery提供的js库
jQuery.ajax(...)
      部分参数:
            url:请求地址
            type:请求方式,GET、POST(1.9.0之后用method)
        headers:请求头
            data:要发送的数据
    contentType:即将发送信息至服务器的内容编码类型(默认: "application/x-www-form-urlencoded; charset=UTF-8")
          async:是否异步
        timeout:设置请求超时时间(毫秒)
      beforeSend:发送请求前执行的函数(全局)
        complete:完成之后执行的回调函数(全局)
        success:成功之后执行的回调函数(全局)
          error:失败之后执行的回调函数(全局)
        accepts:通过请求头发送给服务器,告诉服务器当前客户端可接受的数据类型
        dataType:将服务器端返回的数据转换成指定类型
          "xml": 将服务器端返回的内容转换成xml格式
          "text": 将服务器端返回的内容转换成普通文本格式
          "html": 将服务器端返回的内容转换成普通文本格式,在插入DOM中时,如果包含JavaScript标签,则会尝试去执行。
        "script": 尝试将返回值当作JavaScript去执行,然后再将服务器端返回的内容转换成普通文本格式
          "json": 将服务器端返回的内容转换成相应的JavaScript对象
        "jsonp": JSONP 格式使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数
  • 以上需要重点掌握url,type,data,success(回调函数)
接下来使用ajax编写一个登录例子

1.编写一个AjaxController

  • 这里使用@ResponseBody是因为,springMvc默认会使用视图解析器将返回值进行处理,跳转页面。添加了@ResponseBody则springMVC不会调用视图解析器
@Controller
@RequestMapping("/user")
public class AjaxController {

   @RequestMapping("/login")
   @ResponseBody
   public void ajax1(String username, String password) {
       // 验证用户名是否等于admin,密码是否等于123456
       String msg = "";
        //模拟数据库中存在数据
       if (name!=null){
           if ("admin".equals(name)){
           msg = "用户名正确";
           }else {
           msg = "用户名输入错误";
        }
       }
       if (pwd!=null){
           if ("123456".equals(pwd)){
               msg = "密码正确";
           }else {
               msg = "密码输入有误";
           }
       }
       return msg; //由于@ResponseBody注解,将msg转成json字符串格式返回
  }

}

2.页面引入jQuery。可以使用在线的CDN , 也可以下载导入


<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="${pageContext.request.contextPath}/statics/js/jquery-3.1.1.min.js"></script>

3.JSP页面 login.jsp

  • 使用鼠标焦点事件,验证用户名与密码是否正确
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>ajax</title>
   <script src="${pageContext.request.contextPath}/statics/js/jquery-3.1.1.min.js"></script>
   <script>

       function nameVerify(){
           $.ajax({
               url:"${pageContext.request.contextPath}/user/login",
               type: "post"
               data:{
                   'username':$("#username").val()
               },
               success:function (data) {
                   if (data.toString()=='用户名正确'){
                       $("#nameInfo").css("color","green");
                  }else {
                       $("#nameInfo").css("color","red");
                  }
                   $("#nameInfo").html(data);
              }
          });
      }
       function pwdVerify(){
           $.ajax({
               url:"${pageContext.request.contextPath}/user/login",
               type: "post"
               data:{
                    'password':$("#password").val()
               },
               success:function (data) {
                   if (data.toString()=='密码正确'){
                       $("#password").css("color","green");
                  }else {
                       $("#password").css("color","red");
                  }
                   $("#pwdInfo").html(data);
              }
          });
      }

   </script>
</head>
<body>
<p>
  用户名:<input type="text" id="username" onblur="nameVerify()"/>
   <span id="nameInfo"></span>
</p>
<p>
  密码:<input type="text" id="password" onblur="pwdVerify()"/>
   <span id="pwdInfo"></span>
</p>
</body>
</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 7. JSON讲解 前后端分离时代: 后端部署后端,提供接口,提供数据; 前端独立部署,负责渲染后端的数据; js...
    CodeHuba阅读 186评论 0 0
  • SpringMVC 一、SpringMVC概述 1. 三层架构 服务器端开发程序主要由两种形式构成。一种是基于客户...
    青丶空阅读 382评论 0 1
  • 众所周知jsp是已经入土的技术,虽然仍有不少老项目在用,但已经不值得花时间学习了,当然了解一下也是可以的。如果你是...
    少年弈阅读 629评论 0 2
  • Swagger 这一个文章就够了 Swagger快速理解 Swagger:The Best APIs are Bu...
    Criss陈磊阅读 1,047评论 0 1
  • javaweb复习 <!--外部引入 注意:script必须成对出现 --> ​ <!--不用显示定义...
    拾忆11阅读 506评论 0 0