• JSON & Ajax


    Ajax 和 Json

    json

    JavaScript 对象表示法(JavaScript Object Notation)

    要求和语法格式

    • 对象表示为键值对
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    Json 与 js对象的关系

    • Json 是 js 对象的字符串表示法,使用文本表示一个js对象的信息,本质上就是一个字符串

    • Json 与 js对象互转

      • Json to js, 使用JSON.parse()

        let obj = JSON.parse('{"a":"Hello", "b":"World"}');
        
      • js to json, 使用JSON.stringify()

        let json = JSON.stringify({a:"Hello", b:"World"});
        
    • Servlet内返回json

      • 简单的一个对象
      @WebServlet("/json1")
      public class Demo1 extends HttpServlet {
          @Override
      
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              /*
               * ObjectMapping 是 jackson 操作的核心,所有JSON操作都在ObjectMapping中实现
               * ObjectMapping 有多个序列化的方法,可以把JSON字符串保存在File、outputStream中
               * writeValue(File arg0, Object arg1)可以把arg1转换为json序列保存到arg0文件中
               * writeValue(OutputStream arg0, Object arg1)可以把arg1转换为json序列,并输出到arg0输出流中
               * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组
               * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串
               */
              ObjectMapper objectMapper = new ObjectMapper();
              User user = new User("小明", 10, "男");
              String str = objectMapper.writeValueAsString(user);
              System.out.println(str);
              // 页面输出乱码
              resp.setContentType("text/html;charset=utf-8");
              resp.getWriter().print(str);
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
      
      • 时间类型数据
      @WebServlet("/json3")
      public class Demo3 extends HttpServlet {
          @Override
      
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              // 这里实现日期转换工具类封装工作
              resp.getWriter().print(TimeUtils.getTimeStr());
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
      
      • 封装的工具类
      /**
       * @author Rainful
       * @create 2021/07/28
       */
      public class TimeUtils {
          /**
           * 获取当前时间的默认格式 yyyy-MM-dd HH:mm:ss
           * @return 一个时间字符串类型
           */
          public static String getTimeStr(){
              return getTimeStr(new Date(), "yyyy-MM-dd HH:mm:ss");
          }
      
          /**
           * 获取一个指定时间的默认格式 yyyy-MM-dd HH:mm:ss
           * @param date 一个指定的时间
           * @return 一个时间字符串类型
           */
          public static String getTimeStr(Date date){
              return getTimeStr(date, "yyyy-MM-dd HH:mm:ss");
          }
      
          /**
           * 获取当前时间并按照格式指定的格式格式化
           * @return 一个时间字符串类型
           */
          public static String getTimeStr(String dateFormat) {
              return getTimeStr(new Date(), dateFormat);
          }
      
          /**
           * 获取指定时间并按照格式指定的格式格式化
           * @param date 一个指定的时间
           * @param dateFormat 指定的时间格式
           * @return 一个时间字符串类型
           */
          public static String getTimeStr(Date date, String dateFormat){
              // 日期转化需要关闭 ObjectMapping时间戳功能
              ObjectMapper objectMapper = new ObjectMapper();
              objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
      
              // 自定义时间格式
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
              objectMapper.setDateFormat(simpleDateFormat);
      
              // 获得时间并返回
              Calendar cal = Calendar.getInstance();
              try {
                  return objectMapper.writeValueAsString(cal);
              } catch (JsonProcessingException e) {
                  e.printStackTrace();
              }
              return null;
          }
      }
      

    Ajax

    Ajax 是一种在无需重新加载整个网页的前提下,局部刷新网页的一种技术

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>ajax</title>
        <script src="../jquery/jquery-3.6.0.js"></script>
    </head>
    <body>
    <h3>请输入要访问的地址</h3>
    <p>
        <input type="text" id="url" placeholder="请输入网址" required />
        <input type="button" id="submit" value="提交" />
    </p>
    <h3>网页加载</h3>
    <iframe width="100%" height="500px" id="iframeObj"></iframe>
    
    <script type="text/javascript">
        let submitObj = $("#submit");
        let iframeObj = $("#iframeObj");
        let urlObj = $("#url");
    
        submitObj.click(
            function () {
                iframeObj.attr("src", urlObj.val());
            }
        )
    </script>
    
    </body>
    </html>
    
    • 上面是一个虚假的 Ajax 形式
    • Ajax的核心就是XMLHttpRequest对象(XHR)
      • 这是使用jquery来实现
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <!--下面这行解决html乱码-->
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>ajax</title>
        <script src="../jquery/jquery-3.6.0.js"></script>
    </head>
    <body>
    <p>
        <label for="name">用户名</label><input type="text" id="name" onblur="a1()">
        <span id="nameInfo"></span>
    </p>
    <p>
        <label for="pwd">密码</label><input type="password" id="pwd" onblur="a2()">
        <span id="pwdInfo"></span>
    </p>
    
    <script>
        function a1() {
            $.post(
                "../ajax3", {"name": $("#name").val()}, function (data) {
                    let $nameInfo = $("#nameInfo");
                    console.log(data);
                    if (data === "ok") {
                        $nameInfo.css("color","green");
                    } else {
                        $nameInfo.css("color","red");
                    }
                    console.log(typeof data)
                    $nameInfo.html(data);
                }
            )
        }
        function a2() {
            $.post(
                "../ajax3", {"pwd": $("#pwd").val()}, function (data) {
                    let $pwdInfo = $("#pwdInfo");
                    console.log(data);
                    if (data === "ok") {
                        $pwdInfo.css("color","green");
                    } else {
                        $pwdInfo.css("color","red");
                    }
                    console.log(typeof data)
                    $pwdInfo.html(data);
                }
            )
        }
    </script>
    
    </body>
    </html>
    
    @WebServlet("/ajax3")
    public class AjaxServlet2 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
    
            Map<String, String[]> parameterMap = req.getParameterMap();
            String msg = "";
    
            // 验证用户名及密码
            if (!parameterMap.isEmpty()) {
                String[] name = parameterMap.get("name");
                if (name != null) {
                    if ("admin".equals(name[0])) {
                        System.out.println("用户名验证成功");
                        msg = "ok";
                    } else {
                        System.out.println("用户名验证失败");
                        msg = "用户名输入有误";
                    }
                }
    
                String[] pwd = parameterMap.get("pwd");
                if (pwd != null) {
                    if ("123456".equals(pwd[0])) {
                        System.out.println("密码验证成功");
                        msg = "ok";
                    } else {
                        System.out.println("密码验证失败");
                        msg = "密码输入有误";
                    }
                }
            }
    
            resp.getWriter().print(msg);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
  • 相关阅读:
    接口常用code码
    vscode 开发项目, Prettier ESLint的配置全攻略(基础篇)
    SpringBoot 阿里云OSS 上传和删除
    Vue2 配置跨域
    关于《 MultipartFile 的 file.transferTo 》 的坑
    SQL Server collation introduction with collate SQL casting Baron
    大数据如何进大厂全流程详解【附资料】
    行业领先的界面控件包DevExpress 3月正式发布v21.2.6
    B/S端界面控件DevExtreme ASP.NET MVC入门指南 指定选项(二)
    界面控件DevExpress WinForms v21.2亮点 富文本编辑器功能升级
  • 原文地址:https://www.cnblogs.com/rainful/p/15073126.html
Copyright © 2020-2023  润新知