什么是 JQuery 中的“传统参数序列化风格”?

32

你尝试过那条评论中提供的链接了吗?http://api.jquery.com/jQuery.param - Andy
1个回答

57

请查看jQuery.param()文档:

自jQuery 1.4版本起,$.param()方法会递归序列化深层次的对象,以适应现代脚本语言和框架(例如PHP和Ruby on Rails)。你可以通过设置jQuery.ajaxSettings.traditional = true;来全局禁用此功能。

给定:

var p = {foo: [1,2,3], bar: 42};

true设置为traditional会生成

foo=1&foo=2&foo=3&bar=42

虽然 Python 可以处理这些参数,也就是它为 foo 生成了一个列表,但 PHP 只会考虑最后一个 foo 参数。

但现在默认情况下,序列化的结果是(实际上它已被 URI 编码)

foo[]=1&foo[]=2&foo[]=3&bar=42

正如提到的那样,这可以更好地通过PHP和RoR来处理。


或者更有趣的是,假设:

var p = {foo: {1: [3,4], 2:2,3:3}, bar: 42};

传统方法产生:

foo=[object Object]&bar=42

与“新”的方式相比,这显然没有什么用处:

foo[1][]=3&foo[1][]=4&foo[2]=2&foo[3]=3&bar=42

我正在使用Cherrypy作为后端。我没有看到任何手动处理的文档,似乎都是自动的。你建议在Python中始终使用traditional = true吗?谢谢。 - Jinghui Niu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接