【jquery Ajax 】form表单教学+评论案例

简介: 【jquery Ajax 】form表单教学+评论案例

 form表单的基本使用

       什么是表单

表单在网页中主要负责数据采集功能,HTML中的<form>标签,就是用于采集用户输入的信息,并通过<form>标签的提交操作,把采集到的信息提交到服务器端进行处理。

       表单的组成部分

三个基本组成部分

    • 表单标签
    • 表单域
    • 表单按钮

    image.gif编辑

            <form>标签的属性

    <form>标签用来采集数据,<form>标签的属性则是用来规定如何把采集到的数据发送到服务器。

    image.gif编辑

                    action

    action属性用来规定当提交表单时,向何处发送表单数据。

    action属性的值应该是后端提供的一个url地址,这个url地址专门负责接受表单提交过来的数据。

    当<form>表单未指定action属性值的情况下,action的默认值为当前页面的URL地址。

    当表单提交后,页面会跳转到action属性指向的地址。

                   target

    target属性用来规定在何处打开 action 的url

    它的可选值有五个,默认情况下,target的值是_self,表示在相同的框架中打开action URL。

    image.gif编辑

                    method

    method属性用来规定以何种方式把表单数据提交到action URL。

    它的可选值有两个,分别是get和post。

    默认的情况下,method的值为get,表示通过URL地址的形式,把表单数据提交到action URL

    注意:get方式适合用来提交少量的,简单的数据。

    post方式适合用来提交大量的,复杂的,或包含文件上传的数据。

    在实际开发中,<form>表单的post提交方式用的最多,很少用get,例如登录,注册,添加数据等表单操作,都需要使用post方式来提交表单。

           表单的同步提交以及缺点

                   什么是表单的同步提交

    通过点击submit按钮,触发表单提交的操作,从而使页面跳转到action URL的行为,叫做表单的同步提交。

                   表单提交的缺点

      1. <form>表单同步提交后,整个页面会发生跳转,跳转到action URL所指向的地址,用户体验很差。
      2. <form>表单同步提交后,页面之前的状态和数据会丢失。

      如何解决表单同步提交的缺点

      表单只负责采集数据,Ajax负责将数据提交到服务器。

      通过Ajax提交表单数据

             监听表单提交事件

      <body>
          <form action="/login" method="get" id="f1">
              <input type="text" name="user_name">
              <input type="password" name="password">
              <button type="submit">提交</button>
          </form>
          <script>
              $(function () {
                  $('#f1').submit(function (e) {
                      //阻止默认的跳转
                      e.preventDefault();
                  })
              })
          </script>
      </body>

      image.gif

             快速获取表单中的数据

                     serialize()函数

          为了简化表单中数据的获取操作,jquery提供了serialize()函数,可以一次性获取表单中所有的数据。

      <form action="/login" method="get" id="f1">
              <input type="text" name="user_name">
              <input type="password" name="password">
              <button type="submit">提交</button>
          </form>
          <script>
              $('#f1').submit(function (e) {
                  //阻止默认的跳转
                  e.preventDefault();
                  console.log($(this).serialize());
              })

      image.gif

      image.gif编辑

      结果是一个键值对字符串,键名是name,键值是输入的值,不同的键值对之间用&连接

      所以  在使用这个函数时,一定要给所有表单添加 name属性。

      案例——评论列表

             渲染UI结构

      <body style="padding: 15px;">
          <div class="panel panel-primary">
              <div class="panel-heading">
                  <h3 class="panel-title">发表评论</h3>
              </div>
              <div class="panel-body">
                  <div>评论人</div>
                  <input type="text" class="form-control">
                  <div>评论内容</div>
                  <textarea class="form-control"></textarea>
                  <button type="submit" class="btn-primary btn">发表评论</button>
              </div>
          </div>
          <ul class="list-group" id="cmt-list">
              <li class="list-group-item">
                  <span class="badge" style="background-color: #5bc0de;">评论时间 </span>
                  <span class="badge" style="background-color: #5bc0de;;">评论人</span>
                  Item 1
              </li>
          </ul>
      </body>

      image.gif

      image.gif编辑

              获取评论数据

                     文档

      请求的根路径

      http://www.liulongbin.top:3006

      评论列表

        • 接口URL: /api/cmtlist
        • 调用方式: GET
        • 参数格式:无
        • 响应格式:
        数据名称 数据类型 说明
        status Number 200 成功;500 失败;
        msg String 对 status 字段的详细说明
        data Array 评论列表
        +id Number 评论Id
        +username String 评论人姓名
        +content String 评论内容
        +time String 评论时间

                       代码

        function getCommenlist() {
                    $.ajax({
                        type: 'get',
                        url: 'http://www.liulongbin.top:3006/api/cmtlist',
                        success: function (res) {
                            if (res.statue !== 200)
                                return console.log('获取失败');
                        }
                    })
                }
                getCommenlist()

        image.gif

                  将获取到的初始数据显示在页面上

                               代码

        <script>
                function getCommenlist() {
                    $.ajax({
                        type: 'get',
                        url: 'http://www.liulongbin.top:3006/api/cmtlist',
                        success: function (res) {
                            if (res.status !== 200)
                                return console.log('获取失败');
                            var rows = []
                            $.each(res.data, function (i, item) {
                                var str = ` <li class="list-group-item">
                    <span class="badge" style="background-color: #5bc0de;">评论时间:${item.time}</span>
                    <span class="badge" style="background-color: #5bc0de;;">评论名称:${item.username}</span>
                    ${item.content}
                </li>`
                                rows.push(str)
                            })
                            $('#cmt-list').empty().append(rows)
                        }
                    })
                }
                getCommenlist()
            </script>

        image.gif

        image.gif编辑

                发表评论

                      文档

        发表评论

          • 接口URL: /api/addcmt
          • 调用方式: POST
          • 参数格式:
          参数名称 参数类型 是否必选 参数说明
          username String 评论人名称
          content String 评论内容
            • 响应格式:
            数据名称 数据类型 说明
            status Number 201 发表评论成功;500 请填写完整的评论信息; 501 执行Sql失败;
            msg String 对 status 字段的详细说明

                           修改html表单

            <div class="panel-body">
                        <div>评论人</div>
                        <input type="text" class="form-control">
                        <div>评论内容</div>
                        <textarea class="form-control"></textarea>
                        <button type="submit" class="btn-primary btn">发表评论</button>
                    </div>
            //外层div换成form表单
            //发表评论我们需要获取评论人和评论内容所以我们可以给他添加一个 name属性 
            //name属性 要与文档接口 对应
             <form class="panel-body" id="formAddCmt">
                        <div>评论人</div>
                        <input type="text" class="form-control" name="username">
                        <div>评论内容</div>
                        <textarea class="form-control"></textarea name="content">
                        <button type="submit" class="btn-primary btn">发表评论</button>
                    </form>

            image.gif

                           代码

            $('#formAddCmt').submit(function (e) {
                        e.preventDefault();
                        //decodeURIComponent   解码
                        var data = decodeURIComponent($(this).serialize())
                        console.log(data);
                        $.ajax({
                            type: 'post',
                            url: 'http://www.liulongbin.top:3006/api/addcmt',
                            data: data
                            ,
                            success:
                                function (res) {
                                    console.log(res);
                                    if (res.status !== 201)
                                        return alert('评论发布失败');
                                    getCommenlist()
            //转换成dom对象使用reset()方法重置内容
                                   $('#formAddCmt')[0].reset();
                                }
                        })
                    })

            image.gif


            目录
            相关文章
            |
            3月前
            |
            前端开发 JavaScript
            杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
            杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
            34 0
            杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
            |
            28天前
            |
            前端开发 JavaScript Java
            SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
            关于如何在SpringBoot项目中结合JQuery和Ajax实现表单数据的传输以及单文件或多文件上传的教程。文章提供了完整的前后端示例代码,包括项目的`pom.xml`依赖配置、SpringBoot的启动类`App.java`、静态资源配置`ResourceConfig.java`、配置文件`application.yml`、前端HTML页面(单文件上传和多文件上传加表单内容)以及后端控制器`UserController.java`。文章最后展示了运行结果的截图。
            41 0
            SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
            |
            11天前
            |
            Devops 持续交付 测试技术
            JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
            【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
            22 0
            |
            28天前
            |
            XML JSON 前端开发
            AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
            AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
            26 0
            |
            29天前
            |
            JavaScript 前端开发
            Ajax的使用(jquery的下载)
            这篇文章是关于Ajax学习笔记的分享,包括JQuery的下载方式、Ajax的主要参数说明,以及如何在网页中使用Ajax进行异步请求的示例代码。
            |
            3月前
            |
            JavaScript 前端开发 安全
            安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
            安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
            |
            3月前
            |
            JavaScript 前端开发
            杨校老师课堂之Web前端JS类库_JQuery案例[效果图与代码齐全]
            杨校老师课堂之Web前端JS类库_JQuery案例[效果图与代码齐全]
            27 0
            |
            4月前
            |
            JavaScript 前端开发
            JavaScript-jQuery的使用 + JS的案例
            JavaScript-jQuery的使用 + JS的案例
            40 0
            N..
            |
            4月前
            |
            XML JSON 前端开发
            jQuery实现Ajax
            jQuery实现Ajax
            N..
            52 1
            |
            4月前
            |
            XML 前端开发 JavaScript
            jQuery中ajax如何使用
            jQuery中ajax如何使用
            48 0