随笔 - 46  文章 - 36 评论 - 43 阅读 - 40357

jQuery Ajax:$.param()方法

 

主要参考:

《锋利的jQuery》单东林、张晓菲、魏然

www.3cschool.com.cn《jQuery 参考手册 - Ajax》

 

搜集整理:sagahu@163.com

 

简单示例

 

序列化一个 key/value 对象:

 

var params = { width:1900, height:1200 };

var str = jQuery.param(params);

$("#results").text(str);

 

结果:

 

width=1680&height=1050

 

定义

 

param() 方法创建数组或对象的序列化表示。

 

它是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化。该序列化值可在进行 AJAX 请求时在 URL 查询字符串中使用。

 

语法

 

$.param (object, traditional)

 

参数

说明

object

要进行序列化的数组或对象。

traditional

规定是否使用传统的方式浅层进行序列化(参数序列化)。

返回值

String

 

详细说明

 

param() 方法用于在内部将元素值转换为序列化的字符串表示。请参阅 .serialize() 了解更多信息。

 

对于 jQuery 1.3,如果传递的参数是一个函数,那么用 .param() 会得到这个函数的返回值,而不是把这个函数作为一个字符串来返回。

 

对于 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"}]

 

注意:因为有些框架在解析序列化数字的时候能力有限,所以当传递一些含有对象或嵌套数组的数组作为参数时,请务必小心!

 

在 jQuery 1.4 中,HTML5 的 input 元素也会被序列化。

 

示例:序列化一个比较简单的对象

 

完整代码:

 

<html>

<head>

<script type="text/javascript" src="/jquery/jquery.js"></script>

<script type="text/javascript">

$(document).ready(function(){

  personObj=new Object();

  personObj.firstname="Bill";

  personObj.lastname="Gates";

  personObj.age=60;

  personObj.eyecolor="blue";

  $("button").click(function(){

    $("div").text($.param(personObj));

  });

});

</script>

</head>

<body>

<button>序列化对象</button>

<div></div>

</body>

</html>

 

执行结果:

 

firstname=Bill&lastname=Gates&age=60&eyecolor=blue

 

示例:显示对象的查询字符串表示以及 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

 

可以将 traditional 参数设置为 true,来模拟 jQuery 1.4 之前版本中 $.param() 的行为:

 

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

 

posted on   萨迦狐  阅读(260)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示