Ajax第二天笔记总结(一)

简介: Ajax第二天笔记总结

一、Form表单的基本使用

1、什么是表单

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


2、表单的组成部分

228f29145de84c709894e2761fdf56a1.png


表单由三个基本部分组成:

  • 表单标签
  • 表单域:包含了文本框,密码框,隐藏域,都行文本框,复选框,单选框,下拉选择框和文件上传框等等
  • 表单按钮:通过设置type属性为submit来触发form表单的提交


3、<form> 标签的属性

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

属性 描述
action URL 地址 规定当提交表单时,向何处发送表单数据
method get 或者 post 规定以何种方式把表单数据提交到 action 提供的 URL 地址中
enctype application/x-www-form-urlencoded
multipart/form-data
text/plain
规定在发送表单数据之前如何对其进行编码
target _blank
_self
_parent
_top
framename
规定在何处打开 action URL


  • action

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

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

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

注意: 当提交表单后,会立即跳转到 action 属性指定的 URL 地址


  • target

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

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

_blank 提交时在新的窗口打开
_slef 默认值,在本窗口打开
_parent 在父框架集中打开(很少用)
_top 在整个窗口中打开(很少用)
framename 在指定的框架中打开(很少用)


  • method

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

它的可选值有两个,分别是 getpost

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


注意:

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


  • enctype

enctype属性用来规定在 发送表单数据之前如何对数据进行编码

它的可选值有三个,默认情况下,enctype的值为 application/x-www-form-urlencoded,表示在发送前编码的所有字符


描述
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值
text/plain 空格转换为 “+” 加号,但不对特殊字符编码(很少用)


注意:

1、在涉及到 文件上传 的操作时,必须 将 enctype 的值设置为 multipart/form-data

2、如果表单提交不涉及到文件上传操作,则直接将 enctype 的值设置为 application/x-www-form-urlencoded 即可


4、表单的同步提交及缺点
  • 什么是表单的同步提交
    通过点击 submit 按钮,触发表单提交的操作,从而使页面跳转到 action URL 的行为,叫做表单的同步提交
  • 表单同步提交的缺点
  • <form> 表单同步提交后,整个页面会发生跳转,跳转到 action URL 所指向的地址,用户体验很差
  • <form> 表单同步提交后,页面之前的状态和数据会丢失
  • 如何解决
    表单只负责采集数据,Ajax负责将数据提交到服务器


二、通过Ajax提交表单数据

1、监听表单提交事件

jQuery 中,可以使用如下两种方式,监听到表单的提交事件

代码:

// 第一种方式
$('#f1').submit(function () {
  alert('监听到了表单的提交事件')
})
// 第二种方式
$('#f1').on('submit', function () {  
  alert('监听到了表单的提交事件2')
})


2、阻止表单默认提交行为

当监听到表单的提交事件以后,可以调用事件对象的 event.preventDefault() 函数,来阻止表单的提交和页面的跳转

代码:

// 第一种方式
$('#f1').submit(function (e) {
  alert('监听到了表单的提交事件')
  e.preventDefault()
})
// 第二种方式
$('#f1').on('submit', function (e) {  
  alert('监听到了表单的提交事件2')
  e.preventDefault()
})


3、如何快速获取表单数据

为了简化表单中数据的获取操作,jQuery提供了 serialize() 函数

语法:

$(selector).serialize()


好处:可以一次性获取表单的数据

代码:

// html 结构
<form action="/login" id="f1">
  <input type="text" name="user_name" />
    <input type="password" name="password" />
      <button type="submit">提交</button>
</form>
// js
$(function () {
  $("#f1").submit(function (e) {
    e.preventDefault();
    let data = $(this).serialize();
    console.log(data);
  });
});


注意:在使用 serialize() 函数快速获取表单数据时, 必须为每个表单元素添加 name 属性

三、案例 - 评论列表

  • 效果图

0429ebab81724da1bb2e6971a73826a0.png


  • UI 结构搭建


步骤

  • 评论面板结构
  • 创建panel (快捷键:bs3-panel:primary
  • 修改title里面的标题
  • 在body 里面 创建两个输入框,加上对应的文本提示
  • 最下面加上一个 button(快捷键:bs3-button:primary
  • 评论列表结构
  • 构建一个list列表(快捷键:bs3-list-group
  • 在第一个li里面放两个 span,写入 评论时间评论人

代码:

<!-- 评论面板 -->
<div class="panel panel-primary">
  <div class="panel-heading">
    <h3 class="panel-title">发表评论</h3>
  </div>
  <form class="panel-body" id="formAddCmt">
    <div>评论人:</div>
  <input type="text" class="form-control" name="username" />
    <div>评论内容:</div>
  <textarea class="form-control" name="content"></textarea>
  <button type="submit" class="btn btn-primary">发表评论</button>
  </form>
</div>
<!-- 评论列表 -->
<ul class="list-group">
  <li class="list-group-item">
    <span class="badge" style="background: orange">评论时间:</span>
    <span class="badge" style="background: skyblue">评论人:</span>
    Item 1
  </li>
</ul>


  • 获取评论列表数据


步骤:

  • 定义函数来获取评论列表数据 getCommentList()
  • 查阅接口文档,关注请求url,是否需要携带参数,请求方式
  • 利用 $.ajax() 来进行请求
  • success 回调函数中,判断请求数据是否成功,如果状态码不是200,提示用户


代码:

let baseUrl = `http://www.liulongbin.top:3006`;
// 获取评论列表
function getCommentList() {
  $.ajax({
    method: "GET",
    url: baseUrl + "/api/cmtlist",
    data: {},
    success: function (res) {
      if (res.status !== 200) {
        return alert("获取数据失败!");
      }
      console.log(res.data);
  });
}


渲染评论列表

步骤:

  • 创建一个空数组(rows),用来存放每一个元素的html字符串结构
  • 遍历服务器返回的数据,每遍历一次,拼接一个对应的html字符串结构,然后放入到数组中
  • 找到list容器,先清空一下里面内容,然后利用 append 添加新的数据

代码:

// 获取评论列表
function getCommentList() {
  $.ajax({
    method: "GET",
    url: baseUrl + "/api/cmtlist",
    data: {},
    success: function (res) {
      if (res.status !== 200) {
        return alert("获取数据失败!");
      }
      console.log(res.data);
      let arr = res.data.slice(0, 5);
      let rows = [];
      $.each(arr, function (i, item) {
        rows.push(
          `<li class="list-group-item">
              <span class="badge" style="background: orange;">评论时间:${item.time}</span>
              <span class="badge" style="background: skyblue;">评论人:${item.username}</span>
              ${item.content}
            </li>`
        );
      });
      $(".list-group").empty().append(rows.join(""));
    },
  });
}


发表评论

  • 改造form表单步骤:
  • 把之前panel-body的标签改成 form 标签
  • 给每一个输入框设置 name 属性,name属性的值最好与接口文档定义的参数名称一致
  • 注册 sumbit 事件,阻止表单提交的默认行为
  • 获取用户输入内容(利用 serialize()

代码:

// 发布评论
$("#formAddCmt").on("submit", function (e) {
  e.preventDefault();
  let data = $(this).serialize();
});


完成发表功能

步骤:

  • 查阅接口文档
  • 利用 $.post() 发送请求,传入数据
  • 在成功回调函数里面判断 返回的 status 是否是201,如果是代表成功,失败进行提示
  • 刷新页面(调用 getCommentList()),清空表单内容($('#formAddCmt')[0].reset()

代码:

// 发布评论
$("#formAddCmt").on("submit", function (e) {
  e.preventDefault();
  let data = $(this).serialize();
  $.ajax({
    method: "POST",
    url: baseUrl + "/api/addcmt",
    data,
    success: (res) => {
      if (res.status !== 201) {
        return alert("评论发布失败!");
      }
      getCommentList();
      console.log($(this));
      $(this)[0].reset();
    },
  });
});


四、模板引擎的基本概念

1、渲染 UI 结构时遇到的问题

以前都是通过 拼接字符串 或是 模版字符串 的形式来渲染 UI 结构,这样操作是比较麻烦的,而且很容易出现问题

如果 UI 结构比较复杂,则拼接字符串的时候需要格外注意 引号之前的嵌套 。且一旦需求发生变化,修改起来也非常麻烦


2、什么是模板引擎

模板引擎,它可以根据程序员指定的 模板结构数据,自动生成一个完整的HTML页面

c01e054177944eea94e937de90ef6721.png


3、使用模板引擎的好处
  • 减少了字符串的拼接操作
  • 使代码结构更清晰
  • 使代码更易于阅读与维护



目录
相关文章
|
6月前
|
JSON 前端开发 JavaScript
AJAX 课程学习笔记三
AJAX 课程学习笔记三
|
5月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
94 2
|
前端开发 数据可视化 JavaScript
Python Flask Echarts数据可视化图表实战晋级笔记(4)ajax参数传递互动
Python Flask Echarts数据可视化图表实战晋级笔记(4)ajax参数传递互动
125 0
|
6月前
|
JSON 缓存 前端开发
AJAX 课程学习笔记二
AJAX 课程学习笔记二
|
6月前
|
XML 前端开发 JavaScript
AJAX 课程学习笔记一
AJAX 课程学习笔记一
|
6月前
|
JSON 前端开发 JavaScript
前端知识笔记(三十七)———Django与Ajax
前端知识笔记(三十七)———Django与Ajax
51 0
|
6月前
|
XML JSON 前端开发
Ajax后端极简笔记
Ajax后端极简笔记
71 0
|
6月前
|
JSON 前端开发 JavaScript
前端知识笔记(二)———Django与Ajax
前端知识笔记(二)———Django与Ajax
60 0
|
前端开发
前端学习笔记202306学习笔记第四十三天-ajax的经典四大步骤3
前端学习笔记202306学习笔记第四十三天-ajax的经典四大步骤3
73 0
|
前端开发
前端学习笔记202306学习笔记第四十三天-ajax的经典四大步骤1
前端学习笔记202306学习笔记第四十三天-ajax的经典四大步骤1
63 0