jQuery官網是這樣介紹form.js A simple way to AJAX-ify any form on your page; with file upload and progress support.
簡單來講就是用ajax提交form表單(含file內容)內容
form.js提供的API方法
API | API描述 | 參數 |
ajaxForm | 增長全部須要的事件監聽器,爲ajax提交表單作準備。ajaxForm並不能提交表單。在document的ready函數中,使用ajaxForm來爲ajax提交表單進行準備。 | 接受0個或1個參數。參數能夠是一個回調函數,也能夠是一個Options對象。 |
ajaxSubmit | 使用ajax提交表單。 | 接受0個或1個參數。參數能夠是一個回調函數,也能夠是一個Options對象。 |
formSerialize | 將表單串行化(或序列化)爲一個查詢字符串。這個方法將返回如下格式的字符串:name1=value1&name2=value2。 | 無 |
fieldSerialize | 將表單的字段元素串行化(或序列化)爲一個查詢字符串。當只有部分表單字段須要進行串行化(或序列化)時,使用這個就很方便了。返回如下格式的字符串:name=value1&name2=value2。 | 無 |
fieldValue | 返回匹配插入數組中的表單元素值。該方法以數組的形式返回數據。若是元素值被斷定可能無效,則數組爲空。 | 無 |
resetForm | 將表單恢復到初始狀態。 | 無 |
clearForm | 清除表單元素。該方法將全部的text、password、textarea置空,清除select元素中的選定,以及全部radio按鈕和checkbox按鈕重置爲非選定狀態。 | 無 |
clearFields | 清除字段元素。只有部分表單元素須要清除時方便使用。 | 無 |
ajaxForm和ajaxSubmit都支持Options對象參數php
target | 指明頁面中由服務器響應進行更新的元素。元素的值可能被指定爲一個jQuery選擇器字符串、一個jquery對象、一個DOM元素。 | 默認值:null |
url | 指定提交表單數據的URL。 | 默認值:表單的action屬性值 |
type | 指定提交表單數據的方法(method):「GET」或「POST」。 | 默認值:GET |
beforeSubmit | 表單提交前被調用的回調函數。若是回調函數返回false表單將不被提交。回調函數帶三個調用參數:數組形式的表單數據,jQuery表單對象,以及傳入ajaxForm/ajaxSubmit中的Options對象。 | 默認值:null |
success | 表單成功提交後調用的回調函數。而後dataType選項值決定傳回responseText仍是responseXML的值。 | 默認值:null |
dataType | 返回的數據類型:null、"xml"、"script"、"json"其中之一。 | 默認值:null |
resetForm | 表示若是表單提交成功是否進行重置。 | 默認值:null |
clearForm | 表示若是表單提交成功是否清除表單數據。 | 默認值:null |
timeout | 限制請求的時間,當請求時間大於設置時間後,跳出請求 |
form表單代碼jquery
<form id="form-js-demo" action="test.php" method="post"> <p>Name: <input type="text" name="name" value="name"/></p> <p>password: <input type="text" name="password" value="password"/></p> <p> <input type="checkbox" name="letter" value="A">A <input type="checkbox" name="letter" value="B">B <input type="checkbox" name="letter" value="C">C </p> <p> <input type="radio" name="size" value="S">S <input type="radio" name="size" value="M">M <input type="radio" name="size" value="L">L </p> <p>File: <input type="file" name="file"/></p> <p>Comment: <textarea name="comment">comment</textarea></p> <p> <button type="submit" id="submit">Submit</button> <button type="button" id="serialize">serialize</button> <button type="submit" id="options">Options Submit</button> </p> </form> <div class="data-show"></div> <script src="jquery-3.3.1.min.js"></script> <script src="jquery.form.js"></script>
提交時使用下面三處代碼任意一處皆可,提交後臺數據和form普通提交後同樣,該怎樣處理就怎樣處理ajax
#一、ajaxForm 提交json
$('#form-js-demo').ajaxForm(function (obj) { console.log(obj);//obj 後臺處理數據的返回值 });
#二、ajaxSubmit 提交數組
$('#form-js-demo').submit(function () { $('#form-js-demo').ajaxSubmit(function (obj) { //obj 後臺處理數據的返回值 console.log(obj); }); return false;//若不return false,會跳轉提交(重複提交)。 });
#三、options 參數提交服務器
$('#options').click(function () { var options = { url: 'test2.php', //form提交路由,form表單和options均可設置,兩處都設置了則以form中設置爲準 type: 'get', //form提交方式,form表單和options均可設置,兩處都設置了則以form中設置爲準(method:post/get) target: '.div-display', //服務器返回的數據顯示在元素(id或class)中顯示(後臺返回數據原樣顯示在.div-display中) beforeSubmit: function (obj) { //obj form提交數據,以對像存儲 console.log(obj); //return false;//設置false 則不會提交 }, //提交前回調函數 success: function (obj) { //obj 後臺返回數據 若options設置了 target 項 obj 返回 0 console.log(obj); }, //提交成功後回調函數 dataType: null, //服務器返回數據類型 clearForm: true, //提交成功後是否清空表單中的字段值 restForm: true, //提交成功後是否重置表單中的字段值,即恢復到頁面加載時的狀態 timeout: 6000 //設置請求時間,超過該時間後,自動退出請求,單位(毫秒)。 }; $('#form-js-demo').ajaxForm(options);
form.js 表單序列化方法測試和對比
$("#serialize").click(function () { //jquery 自帶表單序列化方法 會忽略 input[type="file"] 內容 console.log($('#form-js-demo').serialize()); //name=name&password=password&letter=B&letter=C&size=M&comment=comment //form.js 表單序列化方法 包含 input[type="file"] 內容 console.log($('#form-js-demo').formSerialize()); //name=name&password=password&letter=B&letter=C&size=M&file=&comment=comment //form.js 表單序列化方法 只序列input[type="text"]內容 console.log($('#form-js-demo input[type="text"]').fieldSerialize()); //name=name&password=password });