JQuery中serialize()、serializeArray()和param()方法樣本介紹,serializearray
下面是伺服器端的jsp代碼:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String content = request.getParameter("content"); out.println("<div class='comment'><h6> "+username+" :</h6><p class='para'> "+content+" </p></div>"); %>
與JQuery中其他方法一樣,serialize()方法也是作用於一個JQuery對象,它能夠將DOM元素內容序列化為字串,用於ajax請求。通過使用serialize()方法,可以提交本頁面的所有域,代碼如下:
$("#send").click(function(){ $.get("get1.jsp", $("#form1").serialize(), function(data, textStatus) $("#resText").html(data); });});
當單擊“提交”按鈕後,所有屬於form1的表單元素都能提交到後台,即使在表單中再增加欄位,指令碼仍然能夠使用,並且不需要做其他多餘工作。
用字串方式時,需要注意對字元編碼(中文問題),如果不希望編碼帶來麻煩,可以使用serialize()方法,它會自動編碼。
因為serialize()方法作用於JQuery對象,所以不光只有表單能使用它,其他選取器選取的元素也都能使用它,如以下JQuery代碼:
$(":checkbox,:radio").serialize();
把複選框和單選框的值序列化為字串形式,只會將選中的值序列化。
在JQuery中還有一個與serialize()類似的方法--serializeArray(),該方法不是返回字串,而是將DOM元素序列化後,返回JSON格式的資料。JQuery代碼如下:
var fields = $(":checkbox,:radio").serializeArray();console.log(fields); //用FireBug輸出
$.param()方法是serialize()方法的核心,用來對一個數組或對象按照key/value進行序列化。
比如將一個普通的對象序列化:
var obj = {a:1,b:2,c:3};var k = $.param(obj);alert(k); //輸出a=1&b=2&c=3
怎使用jquery serialize只擷取到value部分的值
用serializeArray() 返回JSON資料,直接操作JSON資料,結構如下:
[ {name: 'firstname', value: 'Hello'}, {name: 'lastname', value: 'World'},{name: 'alias'}, // 值為空白]
x=$("form").serializeArray();
alert(x[0].value);//'firstname'的值'Hello'
alert(x[1].value);//'lastname'的值'World'
JQuery中$("#actionForm")formSerialize()報錯:對象不支援"formSerialize"屬性或方法為何?
據我所知,formSerialize()是jQuery的表單外掛程式中提供的方法。
formSerialize()的核心方法是:$.param(data);
Form表單經過formSerialize(),被序列化為形如:name1=value1&name2=value2的字串
必須用一個字串變數來接序列化後的內容
①var queryString = $('#myFormId').formSerialize();
②var queryString = $.param($('#myFormId'));
①、②是等價的,只不過formSerialize();由jQuery.form外掛程式提供,而$.param(data);是jQuery原生提供的。
你的問題:
“對象不支援"formSerialize"屬性或方法”
原因:
①在調用formSerialize之前,沒有引用jQuery.Form.js這個檔案
②$("#actionForm").formSerialize();做在的js檔案,在引用jQuery.Form.js之前調用的,這樣也會找不到這個方法。