JQuery中serialize()、serializeArray()和param()方法

與JQuery中其餘方法同樣,serialize()方法也是做用於一個JQuery對象,它可以將DOM元素內容序列化爲字符串,用於ajax請求。經過使用serialize()方法,能夠提交本頁面的全部域,代碼以下:html

$("#send").click(function(){  
     $.get("get1.jsp", $("#form1").serialize(), function(data, textStatus)  
              $("#resText").html(data);  
     });  
});

當單擊「提交」按鈕後,全部屬於form1的表單元素都能提交到後臺,即便在表單中再增長字段,腳本仍然可以使用,而且不須要作其餘多餘工做。jquery

用字符串方式時,須要注意對字符編碼(中文問題),若是不但願編碼帶來麻煩,可使用serialize()方法,它會自動編碼。ajax

由於serialize()方法做用於JQuery對象,因此不光只有表單能使用它,其餘選擇器選取的元素也都能使用它,如如下JQuery代碼:數組

$(":checkbox,:radio").serialize();

把複選框和單選框的值序列化爲字符串形式,只會將選中的值序列化。jsp

 

在JQuery中還有一個與serialize()相似的方法--serializeArray(),該方法不是返回字符串,而是將DOM元素序列化後,返回JSON格式的數據。JQuery代碼以下:函數

var fields = $(":checkbox,:radio").serializeArray();
console.log(fields);    //用FireBug輸出


$.param()方法是serialize()方法的核心,用來對一個數組或對象按照key/value進行序列化。ui

好比將一個普通的對象序列化:this

var obj = {a:1,b:2,c:3};
var k = $.param(obj);
alert(k);    //輸出a=1&b=2&c=3

基於serializeArray()的擴展jquery的serializeObject()方法:編碼

//注意該方法須要傳入一個jqury的form表單,例如:$("#myform")
var sy = sy || {};
sy.serializeObject = function(form) {
	var o = {};
	$.each(form.serializeArray(), function(index) {
	/*若是表單項的值非空,才進行序列化操做*/
		if (this['value'] != undefined && this['value'].length > 0) {
			if (o[this['name']]) {
				o[this['name']] = o[this['name']] + "," + this['value'];
			} else {
				o[this['name']] = this['value'];
			}
		}
	});
	return o;
};

設有form中有username,password兩個input,看效果spa


$("form").serialize() 顯示爲:

 username=""& password="";

$("form").serializeArray() 顯示爲:

[{"name":"username","value":""},{"name":"password","value":""}];

$("form").serializeObject() 顯示爲:
{"username":"","password":""};

serializeObject僅適用於name值不重複的狀況,若name值重複,則取第一個

用法:通常在作jquery的ajax請求的時候,使用serialize()方法,可是在easyui的datagrid的load()和reload()方法中,須要傳遞的是一個對象,例如:$("#datagrid").datagrid("load",{name:"libai",address:"hubei"});若是咱們不想拼接手寫去一個個拼接須要傳遞的請求,參數,那麼可使用reliableObject()函數,來自動生成一個object對象

相關文章
相關標籤/搜索