mpe*_*ers 22 javascript jquery
我正在使用JQuery向服务器发出JSON请求,并且它的参数序列化似乎是硬编码到PHP期望的,而不是通用的.基本上我有一个看起来像这样的对象:
{
foo: 1,
bar : [1, 3, 5]
}
Run Code Online (Sandbox Code Playgroud)
并将其序列化为:
foo=1&bar[]=1&bar[]=3&bar[]=5
Run Code Online (Sandbox Code Playgroud)
反正有没有做到这一点?
foo=1&bar=1&bar=3&bar=5
Run Code Online (Sandbox Code Playgroud)
在我看来,jQuery不应该与少数服务器端框架所期望的命名约定相关联.如果我想要调用我的参数,bar[]我可以很容易地将其命名为自己,如果它是我的服务器端代码所期望的那样.
zom*_*bat 28
我假设你正在使用JQuery 1.4.你应该看看这个:http: //benalman.com/news/2009/12/jquery-14-param-demystified/
作者讨论了为什么他们让JQuery以这种方式表现,并提出了一些优点.例如,如果不使用"方括号语法",则不能仅使用单个值传入数组.
他还提供了解决方法:
$.ajaxSetup({ traditional: true });
Run Code Online (Sandbox Code Playgroud)
这将告诉JQuery使用非括号的序列化方法.
Kev*_*sox 18
可以使用将对象转换为参数化字符串$.param(obj,true).第二个布尔参数表示应该使用传统的序列化对象的方法.传统方法遇到相同的参数名称时不使用方括号.返回的序列化字符串$.param可以通过任何ajax方法传递.
这种方法优于使用jQuery文档$.ajaxSetup()所述的方法,该文档指出:
注意:此处指定的设置将影响对$ .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(){});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7365 次 |
| 最近记录: |