表單提交的多種方法


表單提交共有四個方法

表單提交方式一:直接利用form表單提交

html頁面代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<body>
<form action="http://localhost:8080/user" method="post">

	username:<input type="text" name="username" /><br>
	
	password:<input type="password" name="password" /> <br>
	
	<input type="submit" value="登錄">

</form>

</body>
</html>

controller頁面代碼:
package com.help.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {

	@PostMapping("/user")
	@ResponseBody
	public String add(String username,String password){
		System.out.println("返回值是》》"+username+"---->"+password);
		String str = "返回值是"+username+password;
		return str;
	}
}


》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

表單提交方式二:使用ajax提交

html頁面代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<body>
<!--  -->
<form  method="post" onsubmit="return false" action="##" id="formtest">

	username:<input type="text" name="username" /><br>
	
	password:<input type="password" name="password" /> <br>
	
	<input type="button" value="登錄" onclick="login()">

</form>
	<script type="text/javascript" src="/js/jquery.min.js"></script>
	<script type="text/javascript" src="/js/jquery.easyui.min.js"></script>
	<script type="text/javascript" src="/js/extJquery.js"></script>
	<script type="text/javascript" src="/js/extEasyUI.js"></script>
<script type="text/javascript">
function login() {
    $.ajax({
    //幾個參數需要注意一下
        type: "POST",//方法類型
        dataType: "text",//預期服務器返回的數據類型 如果是對象返回的是json 如果是字符串這里一定要定義text 之前我就是定義json 結果字符串的返回一直到額error中去
        /*
        dataType:
			要求為String類型的參數,預期服務器返回的數據類型。如果不指定,JQuery將自動根據http包mime信息返回responseXML或responseText,並作為回調函數參數傳遞。可用的類型如下:
			xml:返回XML文檔,可用JQuery處理。
			html:返回純文本HTML信息;包含的script標簽會在插入DOM時執行。
			script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),所有post請求都將轉為get請求。
			json:返回JSON數據。
			jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換后一個“?”為正確的函數名,以執行回調函數。
			text:返回純文本字符串。
        */
        url: "http://localhost:8080/user",//url
        data: $('#formtest').serialize(),//這個是form表單中的id   jQuery的serialize()方法通過序列化表單值
        success: function (result) {
        	alert("成功")
            console.log(result);//打印服務端返回的數據(調試用)
            if (result.resultCode == 200) {
                alert("SUCCESS");
            }
            ;
        },
        error : function(s,s2,s3) {
			//數據成功傳到后台 也有返回值 但就是報錯 parsererror :參考
			https://blog.csdn.net/AinGates/article/details/75250223 / 
			https://blog.csdn.net/AinGates/article/details/75250223
        	/*
        	    寫了一個ajax方法,后台一切正常,通過瀏覽器的F12工具查看XMLHttpRequest.status返回200,XMLHttpRequest.readyState返回4,也都沒有問題。但是回調函數跳到error里,報parsererror的錯誤。經過排查,發現是因為后台返回時用了@ResponseBody注解(SpringMVC返回json格式的注解),但前台ajax提交沒有定義dataType屬性(定義服務器返回的數據類型)

			    還有一種情況是ajax方法中定義了 dataType:"json"屬性,就一定要返回標准格式的json字符串,要不jQuery1.4+以上版本會報錯的,因為不是用eval生成對象了,用的JSON.parse,如果字符串不標准就會報錯。比如只返回一個簡單的字符串“success”,“fail”, true,false,並不是標准的json字符串就會報錯。
			
		               首先,jQuery 1.4版本之后對服務端返回的JSON 數據要求比較嚴格,必須嚴格按照JSON的標准來了。
        	*/
			
			console.log(s)
        	console.log(s2)
        	console.log(s3)
        	
            alert("異常!");
        }
    });
}
</script>

</body>

</html>

controller類的代碼不變,啟動項目並訪問http://localhost:8080/query.html 返貨成功即可

這里遇到一個問題:就是傳過去數據后,返回值正常,但進入了error ,使用console打印error時出現 parsererror

錯誤原因:ajax的datatype設置問題 我之前設置為 json ,這種只能是接收后台傳回來的json值 傳回其他值就會出現這種錯誤

解決辦法:將datatype的類型改為 text

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

表單提交方式三:使用easyui的form插件提交

html頁面代碼:(需要引入Jquery 與 easyui的js文件)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<body>
<!--  -->
<form  method="post" onsubmit="return false" action="##" id="formtest">

	username:<input type="text" name="username" /><br>
	
	password:<input type="password" name="password" /> <br>
	
	<input type="button" value="登錄" onclick="login()">

</form>
	<script type="text/javascript" src="/js/jquery.min.js"></script>
	<script type="text/javascript" src="/js/jquery.easyui.min.js"></script>
	<script type="text/javascript" src="/js/extJquery.js"></script>
	<script type="text/javascript" src="/js/extEasyUI.js"></script>
<script type="text/javascript">
function login() {
	//參考:http://www.jeasyui.net/plugins/166.html
   $("#formtest").form("submit",{
	   url:"http://localhost:8080/user",
	   onsubmit:function(){
		   //這里驗證表單是否可以提交  如果返回false阻止提交
	   },
	   success:function (data){
		   alert("12354")
		   alert(data)
	   }
	   
   })
}
</script>

</body>

</html>

controller類不變,啟動項目並訪問http://localhost:8080/query.html 這個是我定義的頁面返回結果表示成功

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

表單提交方式四:form表單提交文件/圖片

需要設定form的enctype=“multipart/form-data” 如果不加這個會傳不過去

附件只能通過submit方法進行提交

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

將form表單的一些屬性記在下方以便參考:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<body>
<!--form表單中的屬性: 
     accept-charset  作用: 規定服務器可處理的表單數據字符集。   常用值: UTF-8 - Unicode 字符編碼   、ISO-8859-1 - 拉丁字母表的字符編碼 、 gb2312 - 簡體中文字符集       
     action  作用:規定當提交表單時向何處發送表單數據。  可能的值: 絕對 URL - 指向其他站點(比如 src="www.example.com/example.htm")、相對 URL - 指向站點內的文件(比如 src="example.htm")
     autocomplete  作用:規定是否啟用表單的自動完成功能。
     enctype 作用:規定在發送表單數據之前如何對其進行編碼  enctype 屬性可能的值:  application/x-www-form-urlencoded    multipart/form-data   text/plain
 	 method 作用:規定用於發送 form-data 的 HTTP 方法     常用值:get / post
 	 name 作用:規定表單的名稱。
 	 novalidate 作用:如果使用該屬性,則提交表單時不進行驗證。  使用方式 : novalidate="novalidate"
 	 target 作用:規定在何處打開 action URL。 常用值: _blank:在新窗口中打開。    _self:默認。在相同的框架中打開。   _parent:在父框架集中打開。  _top:在整個窗口中打開。   framename:在指定的框架中打開。 
 -->
<form>
<!--常用的表單元素   form   表單  input   表單元素,表單項     select和option  下拉菜單      textarea 文本域  -->
	<!-- input 屬性 :  
		value 屬性規定輸入字段的初始值
		readonly 屬性規定輸入字段為只讀(不能修改)
		disabled 屬性規定輸入字段是禁用的。  被禁用的元素是不可用和不可點擊的。  被禁用的元素不會被提交。  disabled 屬性不需要值。它等同於 disabled="disabled"。
		size 屬性規定輸入字段的尺寸
		maxlength 屬性規定輸入字段允許的最大長度
		H5之后添加的屬性
		autocomplete 屬性規定表單或輸入字段是否應該自動完成。  當自動完成開啟,瀏覽器會基於用戶之前的輸入值自動填寫值。
					提示:您可以把表單的 autocomplete 設置為 on,同時把特定的輸入字段設置為 off,反之亦然。
			        autocomplete 屬性適用於 <form> 以及如下 <input> 類型:text、search、url、tel、email、password、datepickers、range 以及 color。
					例子  <form action="action_page.php" autocomplete="on">   First name:<input type="text" name="fname"><br>  E-mail: <input type="email" name="email" autocomplete="off"><br>  </form> 
		autofocus 屬性是布爾屬性。  如果設置,則規定當頁面加載時 <input> 元素應該自動獲得焦點。
		form 屬性規定 <input> 元素所屬的一個或多個表單。   提示:如需引用一個以上的表單,請使用空格分隔的表單 id 列表。
		formaction 屬性規定當提交表單時處理該輸入控件的文件的 URL。  
					formaction 屬性覆蓋 <form> 元素的 action 屬性。     
					formaction 屬性適用於 type="submit" 以及 type="image"
		formenctype 屬性規定當把表單數據(form-data)提交至服務器時如何對其進行編碼(僅針對 method="post" 的表單)。
					formenctype 屬性覆蓋 <form> 元素的 enctype 屬性。
					formenctype 屬性適用於 type="submit" 以及 type="image"。
		formmethod 屬性定義用以向 action URL 發送表單數據(form-data)的 HTTP 方法。
					formmethod 屬性覆蓋 <form> 元素的 method 屬性。
					formmethod 屬性適用於 type="submit" 以及 type="image"。
	    formnovalidate 屬性
					novalidate 屬性是布爾屬性。
					如果設置,則規定在提交表單時不對 <input> 元素進行驗證。
					formnovalidate 屬性覆蓋 <form> 元素的 novalidate 屬性。
					formnovalidate 屬性可用於 type="submit"。
		formtarget 屬性規定的名稱或關鍵詞指示提交表單后在何處顯示接收到的響應。
					formtarget 屬性會覆蓋 <form> 元素的 target 屬性。
					formtarget 屬性可與 type="submit" 和 type="image" 使用。			
		height 和 width 屬性規定 <input> 元素的高度和寬度。   height 和 width 屬性僅用於 <input type="image">。
					注釋:請始終規定圖像的尺寸。如果瀏覽器不清楚圖像尺寸,則頁面會在圖像加載時閃爍。
		min 和 max 屬性規定 <input> 元素的最小值和最大值。
					min 和 max 屬性適用於如需輸入類型:number、range、date、datetime、datetime-local、month、time 以及 week。
		multiple 屬性是布爾屬性。    如果設置,則規定允許用戶在 <input> 元素中輸入一個以上的值。
					multiple 屬性適用於以下輸入類型:email 和 file。
		pattern 屬性規定用於檢查 <input> 元素值的正則表達式。    pattern 屬性適用於以下輸入類型:text、search、url、tel、email、and password。
		placeholder 屬性規定用以描述輸入字段預期值的提示(樣本值或有關格式的簡短描述)。  該提示會在用戶輸入值之前顯示在輸入字段中。
					placeholder 屬性適用於以下輸入類型:text、search、url、tel、email 以及 password。
		required 屬性是布爾屬性。   如果設置,則規定在提交表單之前必須填寫輸入字段。
					required 屬性適用於以下輸入類型:text、search、url、tel、email、password、date pickers、number、checkbox、radio、and file.
		step 屬性規定 <input> 元素的合法數字間隔。     示例:如果 step="3",則合法數字應該是 -3、0、3、6、等等。
		
		
	-->
	
	<!-- 在form標簽中添加Action(提交的地址)和method(post),且有一個submit按鈕(<input type=’submit’>)就可以進行數據的提交,每一個input標簽都需要有一個name屬性,才能進行提交 -->
	
	<!-- 用戶名  type 是類型  name -->
	First name: <input type="text" name="firstname"><br>
	Last nameee: <input type="text" name="lastname"><br>
	<!-- 密碼 -->
	Password: <input type="password" name="pwd"><br><br>
	<!-- 單選按鈕 -->
	性別:<input type="radio" name="sex" value="male">Male
	<input type="radio" name="sex" value="female">Female<br><br>
	<!-- 復選框 -->
	愛好:<input type="checkbox" name="vehicle" value="Bike">I have a bike
	<input type="checkbox" name="vehicle" value="Car">I have a car <br><br>
	<!-- 文件域 -->
	選擇文件:<input type="file" name="newfile"> <br><br>
	
	<!-- 隱藏域  這個在頁面上不可加 可以保存一些不需要顯示的隱藏信息 用於傳遞值-->
	<input type="hidden" name="newhidden">
	<!-- 將表單里的信息清空 重新填寫 -->
	<input type="reset" value="清空表單"><br><br>
		<!-- 用來設置一個按鈕 這個按鈕沒有提價功能 -->
	<input type="button" value="注冊">
	<!--這個不常用    圖片提交按鈕 點擊這個與點擊submit效果相同    插入圖片用 img標簽 而不是input標簽-->
	<input type="image" name="newimg" ><br><br>
	<!--常用   提交按鈕  type 是類型  value 是按鈕顯示的內容-->
	<input type="submit" value="Submit"><br><br>
	<!--
	 type=image和type=submit的異同:
	都可以相應回車,並且都能提交。
	區別就是type=image的input提交方式會把按鈕點擊的位置坐標x,y提交過去。
	對於通常的表單應用來說,這樣多一兩個參數並沒有問題,因為我們在接收端中都是按照指定的名稱來處理參數,
	所以即使多了兩個參數也不會有任何問題。
         但是在做支付接口的時候(例如:支付寶接口)你就會發現,多出兩個隱藏參數會帶來很麻煩的問題,
         因為在在提交表單之后,接收端會對參數名稱進行MD5校驗,想想多兩個參數會帶來什么問題。
         將會直接導致表單校驗不通過,然后支付失敗的問題。
     
         所以在在通常網站開發中不提倡使用type=image作為表單的提交按鈕。
 -->
</form>
</body>
</html>


免責聲明!

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



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