jQuery.param()
jQuery.param( obj ) 返回: String
描述: 创建一个序列化的数组或对象,适用于一个URL 地址查询字符串或Ajax请求。
-
version added: 1.2jQuery.param( obj )
obj一个数组或序列化的对象。
-
version added: 1.4jQuery.param( obj, traditional )
obj一个数组或序列化的对象。
traditional一个布尔值,指示是否执行了传统的“shallow”的序列化。
这个函数 可以将元素的值 转换为 序列化字符串 (更多细节查阅 .serialize() )。
在 jQuery 1.3中, 这个函数的返回值被用来代替函数作为一个字符串。
在 jQuery 1.4中, $.param()
方法 递归对象以至于 适应就好像 PHP 和 Ruby on Rails一样的现代的脚本语言 和 框架。 你可以通过设置 jQuery.ajaxSettings.traditional = true;
废除这个全局功能。
注意: 因为一些框架解析序列化的数字的能力有限, 当通过obj或者数组中包含嵌套在另一个数组传递参数,我们应该谨慎。
在 jQuery 1.4 HTML5中输入序列话的元素,也是如此。
我们可以显示一个对象的查询字符串 和一个相应的URI-decoded 版本,如下:
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
在先前的 jQuery 1.4中检测 $.param()
的性能, 我们可以设置 traditional
参数为 true
:(英文语文:To emulate the behavior of $.param()
prior to jQuery 1.4, we can set the traditional
argument to 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);
shallowEncoded
和 shallowDecoded
的结果如下:
a=%5Bobject+Object%5D&b=1&b=2&b=3
a=[object+Object]&b=1&b=2&b=3
举例:
例子: 序列化一个 key/value 对象.
<!DOCTYPE html>
<html>
<head>
<style>div { color:red; }</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/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>
Demo:
例如: 序列号一些复杂的对象
// <=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"