jQuery Ajax:serialize()方法
主要参考:
《锋利的jQuery》单东林、张晓菲、魏然
www.3cschool.com.cn之《jQuery 参考手册 - Ajax》
搜集整理:sagahu@163.com
简单示例
输出序列化表单值的结果:
$("button").click(function(){
$("div").text($("form").serialize());
});
定义
serialize() 方法将表单元素的名称和值序列化为URL 编码文本字符串。返回值类似于:'single=1&multiple=2'。
您可以选择一个或多个表单元素(比如 input 及/或 文本框),或者 form 元素本身。
序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中。
语法
. serialize ()
|
参数 |
说明 |
|
无参数 |
|
|
返回值 |
jQuery |
详细说明
serialize() 方法创建以标准 URL 编码表示的文本字符串。它的操作对象是代表表单元素集合的 jQuery 对象。
表单元素有几种类型:
<form>
<div><input type="text" name="a" value="1" id="a" /></div>
<div><input type="text" name="b" value="2" id="b" /></div>
<div><input type="hidden" name="c" value="3" id="c" /></div>
<div>
<textarea name="d" rows="8" cols="40">4</textarea>
</div>
<div><select name="e">
<option value="5" selected="selected">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select></div>
<div>
<input type="checkbox" name="f" value="8" id="f" />
</div>
<div>
<input type="submit" name="g" value="Submit" id="g" />
</div>
</form>
.serialize() 方法可以操作已选取个别表单元素的 jQuery 对象,比如 <input>, <textarea> 以及 <select>。不过,选择 <form> 标签本身进行序列化一般更容易些:
$('form').submit(function() {
alert($(this).serialize());
return false;
});
输出标准的查询字符串:
a=1&b=2&c=3&d=4&e=5
注释:只会将”成功的控件“序列化为字符串。如果不使用按钮来提交表单,则不对提交按钮的值序列化。如果要表单元素的值包含到序列字符串中,元素必须使用 name 属性。
序列化的好处
下面这段代码,将表单字段的值逐个添加到$.get()方法的data参数中:
$("#send").click(function(){
$.get("get1.php", {
username: $("#username").val(),
content: $("content").val()
}, function(data, textStatus){
$("#resText").html(data); // 将返回数据添加到页面上
}
);
});
这种方式在只有少量字段的表单中,勉强还可以使用,但如果表单元素越来越复杂,使用这种方式在增加大量工作的同时也使得表单缺乏弹性。而使用serialize()方法,可以方便地将DOM元素内容序列化为字符串,用于Ajax请求。把上面代码修改如下:
$("#send").click(function(){
$.get("get1.php", $("#form1").serialize(),
function(data, textStatus){
$("#resText").html(data); // 将返回数据添加到页面上
}
);
});
即使在表单中再增加新字段,脚本仍然能够使用,并且不需要作其它多余的工作。
需要注意,$.get()方法中data参数不仅可以使用映射方式,如下代码:
{
username: $("#username").val(),
content: $("content").val()
}
也可以使用字符串方式,代码如下:
"username="+encodeURIComponent($('#username').val())
+"&content="+encodeURIComponent($('#content').val())
使用字符串方式时,需要注意对字符编码(中文问题),如果不希望编码带来麻烦,可以使用serialize()方法,它会自动编码。
因为serialize()方法作用于jQuery对象,所以不光只有表单能够使用它,其它选择器选取的元素也能够使用它。
$(":checkbox,:radio").serialize(); // 把复选框和单选框的值序列化为字符串,只会将选中的值序列化
浙公网安备 33010602011771号