返回值:StringjQuery.param(obj)
创建一个数组或者对象的序列化表示。适用于 URL 查询字符串或者 Ajax 请求。
-
1.2 新增jQuery.param(obj)
obj (Array, Object) 用于序列化的数组或对象。 -
1.4 新增jQuery.param(obj, traditional)
obj (Array, Object) 用于序列化的数组或对象。traditional (Boolean) 一个布尔值,用于确定是否使用传统的“浅层”序列化。
将表单元素值转换成序列化的字符串时,jQuery 内部也会使用这个函数。参考 .serialize() 获得更多信息。
从 jQuery 1.3 起,如果传入的 obj 是一个函数,则会执行这个函数并序列化这个函数的返回值,而不再仅仅简单地将这个函数当作字符串处理。
从 jQuery 1.4 起,$.param()
方法将会通过深度递归的方式序列化对象,以便符合现代化脚本语言的需求,比如 PHP 和 Ruby on Rails。你也可以通过设置 jQuery.ajaxSettings.traditional = true;
这个选项来全局的禁用这个特性。
如果传入的对象是在一个数组中,则他必须是一个对象数组,其格式要跟 .serializeArray() 返回的格式一样:
[{name:"first",value:"Rick"}, {name:"last",value:"Astley"}, {name:"job",value:"Rock Star"}]
注意,由于某些框架能力有限,无法解析序列化数组,所以在传递 obj 参数时要务必小心,尽量不要传递含有对象的数组,或者数组中嵌套着数组。
在 jQuery 1.4 中,HTML5 的表单元素也已经可以序列化了。
下面我们显示一个代表对象的查询字符串,以及对应的 URI 编码版:
var myObject = { a: { one: 1, two: 2, three: 3 }, b: [1,2,3] }; var recursiveEncoded = $.param(myObject); var recursiveDecoded = decodeURIComponent($.param(myObject)); alert(recursiveEncoded); alert(recursiveDecoded);
recursiveEncoded
和 recursiveDecoded
的值应该是下面的样子:
a%5Bone%5D=1&a%5Btwo%5D=2&a%5Bthree%5D=3&b%5B%5D=1&b%5B%5D=2&b%5B%5D=3
a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3
如果想要模拟 $.param()
函数在 jQuery 1.4 之前的行为,我们可以将 traditional
参数设置成 true
:
var myObject = { a: { one: 1, two: 2, three: 3 }, b: [1,2,3] }; var shallowEncoded = $.param(myObject, true); var shallowDecoded = decodeURIComponent(shallowEncoded); alert(shallowEncoded); alert(shallowDecoded);
此时,recursiveEncoded
和 recursiveDecoded
的值就成了下面的样子:
a=%5Bobject+Object%5D&b=1&b=2&b=3
a=[object+Object]&b=1&b=2&b=3
示例:
序列化一个键值对对象。
<!DOCTYPE html>
<html>
<head>
<style>div { color:red; }</style>
<script src="jquery.min.js"></script>
</head>
<body>
<div id="results"></div>
<script>
var params = { width:1680, height:1050 };
var str = jQuery.param(params);
$("#results").text(str);
</script>
</body>
</html>
演示:
示例:
序列化一些复杂对象。
CSS 代码:
div { color:red; }
jQuery 代码:
// <=1.3.2:
$.param({ a: [2,3,4] }) // "a=2&a=3&a=4"
// >=1.4:
$.param({ a: [2,3,4] }) // "a[]=2&a[]=3&a[]=4"
// <=1.3.2:
$.param({ a: { b:1,c:2 }, d: [3,4,{ e:5 }] }) // "a=[object+Object]&d=3&d=4&d=[object+Object]"
// >=1.4:
$.param({ a: { b:1,c:2 }, d: [3,4,{ e:5 }] }) // "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"