Form表單使用、ajax解決表單提交后頁面跳轉數據丟失的問題


一、Form表單基本使用

表單概念在網頁中主要負責 數據采集功能。HTML中<form>標簽,就是用於采集用戶輸入的信息,並通過 <form>標簽的提交操作,把采集的信息提交到服務器端進行處理

表單的組成部分:

• 表單標簽

• 表單域:包含了文本框,密碼框,隱藏域,都行文本框,復選框,單選框,下拉選擇框和文件上傳框等等

• 表單按鈕:通過設置type屬性為submit來觸發form表單的提交

 <form> 標簽的屬性

action

action:屬性用來規定當提交表單時,向何處發送表單數據

action 屬性的值應該是后端提供的一個URL地址,這個URL地址專門負責接收表單提交過來的數據。

<form>表單在未制定 action 屬性值的情況下,action的默認值為當前頁面的 URL 地址

注意: 當提交表單后,會立即跳轉到 action 屬性指定的 URL 地址

target

target 屬性用來規定 在何處打開 action URL

它的可選值有5個,默認情況下,target的值是 _self,表示在相同的框架中打開 action URL

method

method 屬性用來規定 以何種方式 把表單數據提交到 action URL

它的可選值有兩個,分別是 getpost

默認情況下,method的值為 get, 表示通過URL地址的形式,把表單數據提交到 action URL

注意:

  • get 方式適合用來提交少量的簡單的數據

  • post 方式適合用來提交大量的復雜的,或包含文件上傳的數據

enctype

enctype屬性用來規定在 發送表單數據之前如何對數據進行編碼

 可選值有三個,默認情況下,enctype的值為 application/x-www-form-urlencoded,表示在發送前編碼的所有字符

 表單的同步提交及缺點

什么是表單的同步提交

通過點擊 submit 按鈕,觸發表單提交的操作,從而使頁面跳轉到 action URL 的行為,叫做表單的同步提交

 表單同步提交的缺點

  • <form> 表單同步提交后,整個頁面會發生跳轉,跳轉到 action URL 所指向的地址,用戶體驗很差

  • <form> 表單同步提交后,頁面之前的狀態和數據會丟失

 如何解決呢?

表單只復雜采集數據,Ajax負責將數據提交到服務器

二、通過Ajax提交表單數據

監聽表單提交事件

 jQuery 中,可以使用如下兩種方式,監聽到表單的提交事件

阻止表單默認提交行為

當監聽到表單的提交事件以后,可以調用事件對象的 event.preventDefault() 函數,來阻止表單的提交和頁面的跳轉

 如何快速獲取表單數據

serialize() 函數

為了簡化表單中數據的獲取操作,jQuery提供了 serialize() 函數,語法格式如下:

 好處:可以一次性獲取表單的數據

 示例代碼:

 注意:在使用 serialize() 函數快速獲取表單數據時,必須為每個表單元素添加 name 屬性

 示列如下:

  溫馨提示:案例中引入的bootstrap.css、jquery.js,可自行去官網下載后再引入使用

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5   <meta charset="UTF-8">
 6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8   <title>Document</title>
 9   <link rel="stylesheet" href="./lib/bootstrap.css" />
10   <script src="./lib/jquery.js"></script>
11   <script src="./js/cmt.js"></script>
12 </head>
13 
14 <body style="padding: 15px;">
15 
16   <!-- 評論面板 -->
17   <div class="panel panel-primary">
18     <div class="panel-heading">
19       <h3 class="panel-title">發表評論</h3>
20     </div>
21     <!-- 1 div改造成form標簽並起個名字 2 監聽表單的提交submit 3 serilize()用來獲取表單數據  -->
22     <form class="panel-body" id="formAddCmt">
23       <div>評論人:</div>
24       <input type="text" class="form-control" name="username" autocomplete="off" />
25       <div>評論內容:</div>
26       <textarea class="form-control" name="content"></textarea>
27 
28       <button type="submit" class="btn btn-primary">發表評論</button>
29     </form>
30   </div>
31 
32 
33   <!-- 評論列表 -->
34   <ul class="list-group" id="cmt-list">
35     <li class="list-group-item">
36       <span class="badge" style="background-color: #F0AD4E;">評論時間:</span>
37       <span class="badge" style="background-color: #5BC0DE;">評論人:</span>
38       Item 1
39     </li>
40   </ul>
41 
42 </body>
43 
44 </html>

cmt.js文件

 1 $(function () {
 2   // 獲取圖書列表數據
 3   function getNewsList() {
 4     $.ajax({
 5       type: "GET",
 6       url: "http://www.liulongbin.top:3006/api/cmtlist",
 7       success: function (res) {
 8         if (res.status !== 200) return alert("獲取圖書列表失敗!!");
 9         // 獲取圖書成功
10         // 把數據渲染到頁面
11         var rows = [];
12         $.each(res.data, function (i, item) {
13           var str = `<li class="list-group-item">
14        <span class="badge" style="background-color: #F0AD4E;">評論時間:${item.time}</span>
15        <span class="badge" style="background-color: #5BC0DE;">評論人:${item.username}</span>
16        ${item.content}
17       </li>`;
18           rows.push(str);
19         });
20         $("#cmt-list").empty().append(rows.join(""));
21       },
22     });
23   }
24   getNewsList();
25   // 表單功能
26   $("#formAddCmt").on("submit", function (e) {
27     //阻止表單默認提交行為
28     e.preventDefault();
29     // 一次性獲取表單的數據
30     var data = $(this).serialize();
31     $.ajax({
32       type: "POST",
33       url: "http://www.liulongbin.top:3006/api/addcmt",
34       data,
35       success: function (res) {
36         if (res.status !== 200) return alert("發表評論列表失敗");
37         getNewsList();
38         //重置表單
39         // $("#formAddCmt")[0]轉換成原生DOM
40         $("#formAddCmt")[0].reset();
41       },
42     });
43   });
44 });

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM