✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习
目录
form表单的基本使用
什么是表单
表单的组成部分
标签的属性
action
target
method
表单的同步提交以及缺点
什么是表单的同步提交
表单提交的缺点
通过Ajax提交表单数据
监听表单提交事件
快速获取表单中的数据
serialize()函数
案例——评论列表
渲染UI结构
获取评论数据
文档
请求的根路径
评论列表
代码
将获取到的初始数据显示在页面上
发表评论
修改html表单
表单在网页中主要负责数据采集功能,HTML中的
三个基本组成部分
action属性用来规定当提交表单时,向何处发送表单数据。
action属性的值应该是后端提供的一个url地址,这个url地址专门负责接受表单提交过来的数据。
当
当表单提交后,页面会跳转到action属性指向的地址。
target属性用来规定在何处打开 action 的url
它的可选值有五个,默认情况下,target的值是_self,表示在相同的框架中打开action URL。
method属性用来规定以何种方式把表单数据提交到action URL。
它的可选值有两个,分别是get和post。
默认的情况下,method的值为get,表示通过URL地址的形式,把表单数据提交到action URL
注意:get方式适合用来提交少量的,简单的数据。
post方式适合用来提交大量的,复杂的,或包含文件上传的数据。
在实际开发中,
通过点击submit按钮,触发表单提交的操作,从而使页面跳转到action URL的行为,叫做表单的同步提交。
如何解决表单同步提交的缺点
表单只负责采集数据,Ajax负责将数据提交到服务器。
<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>
为了简化表单中数据的获取操作,jquery提供了serialize()函数,可以一次性获取表单中所有的数据。
"/login" method="get" id="f1"> 提交 $('#f1').submit(function (e) { //阻止默认的跳转 e.preventDefault(); console.log($(this).serialize()); })
结果是一个键值对字符串,键名是name,键值是输入的值,不同的键值对之间用&连接
所以 在使用这个函数时,一定要给所有表单添加 name属性。
"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>
http://www.liulongbin.top:3006
function getCommenlist() { $.ajax({ type: 'get', url: 'http://www.liulongbin.top:3006/api/cmtlist', success: function (res) { if (res.statue !== 200) return console.log('获取失败'); } }) } getCommenlist()
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 = ` 评论时间:${item.time} 评论名称:${item.username} ${item.content} ` rows.push(str) }) $('#cmt-list').empty().append(rows) } }) } getCommenlist()
<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"> <button type="submit" class="btn-primary btn">发表评论button> form>
$('#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(); } }) })
京公网安备 11010502049817号