没有括号乱七八糟的JQuery参数序列化

我正在使用JQuery向服务器发出JSON请求,似乎它的参数序列化被硬编码为PHP期望的而不是通用的。 基本上我有一个看起来像这样的对象:

{ foo: 1, bar : [1, 3, 5] } 

并将其序列化为:

 foo=1&bar[]=1&bar[]=3&bar[]=5 

反正有没有做到这一点?

 foo=1&bar=1&bar=3&bar=5 

在我看来,jQuery不应该与少数服务器端框架期望的命名约定相关联。 如果我想让我的param被称为bar[]我可以很容易地将它命名为我自己的服务器端代码所期望的。

我假设你正在使用JQuery 1.4。 你应该看看这个: http : //benalman.com/news/2009/12/jquery-14-param-demystified/

作者讨论了为什么他们让JQuery以这种方式运行,并提出了一些优点。 例如,如果不使用“方括号语法”,则不能仅使用单个值传入数组。

他还提供了解决方法:

 $.ajaxSetup({ traditional: true }); 

这将告诉JQuery使用非括号的序列化方法。

可以使用$.param(obj,true)将对象转换为参数化字符串。 第二个布尔参数表示应该使用传统的序列化对象的方法。 传统方法遇到相同的参数名称时不使用方括号。 从$.param返回的序列化字符串可以通过任何ajax方法传递。

这个方法优于使用$.ajaxSetup()如jQuery文档所述:

注意:此处指定的设置将影响对$ .ajax或基于AJAX的衍生产品(如$ .get())的所有调用。 这可能导致不良行为,因为其他呼叫者(例如,插件)可能期望正常的默认设置。 出于这个原因,我们强烈建议不要使用此API。 相反,在调用中显式设置选项或定义一个简单的插件来执行此操作。

例:

 var obj = {myProp: "test", arr: [1,2,3,4]}; var serializedObj = $.param(obj, true); //myprop=test&arr=1&arr=2&arr=3&arr=4 $.post(url,serializedObj,function(){});