返回值:StringjQuery.param(obj)

创建一个数组或者对象的序列化字符串。适用于 URL 查询字符串或者 Ajax 请求。

将表单元素值转换成序列化的字符串时,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 参数时要务必小心,尽量不要传递含有对象的数组,或者数组中嵌套其它数组。

注意: 由于目前对序列化字符串没有统一的规约,此方法无法对复杂数据结构进行编码,使之可以支持所有语言。但到目前为止, $.param 方法对于对象的序列化还是很有用处的。

在 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);

recursiveEncodedrecursiveDecoded 的值应该是下面的样子:

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);

此时,shallowEncodedshallowDecoded 的值就成了下面的样子:

a=%5Bobject+Object%5D&b=1&b=2&b=3
a=[object+Object]&b=1&b=2&b=3

示例:

Serialize a key/value object.

<!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"