没有括号乱七八糟的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(){});