提问人:Eli 提问时间:12/12/2009 最后编辑:CommunityEli 更新时间:12/12/2009 访问量:889
jQuery、JSON:Javascript obj/数组到 json 以用于 jQuery.ajax
jQuery, JSON: Javascript obj/array to json for use with jQuery.ajax
问:
这是一个与此类似的问题:将 js Array() 转换为 JSon 对象以与 JQuery .ajax 一起使用
除了我有一个包含多个数组的对象。
对象看起来像(模拟):
{“Users”:[1,2,3,4], “Clients”:[5,6,7,8], “CompletionStatus”:“pastdue”, “DateRange”:“thisweek”}
并且是这样创建的:
Filter = new FilterData;
Filter.Add(9, "Clients");
Filter.Add(12, "Clients");
Filter.Add(75, "Clients");
Filter.Add(9, "Users");
Filter.Add(12, "Users");
Filter.Add(75, "Users");
Filter.SetValue("DateRange", "yesterday");
function FilterData(){
this.Users = [];
this.Clients = [];
this.Options = [];
this.Options.CompletionStatus = [];
this.Options.DateRange = [];
this.Add = function(id, type){
this[type].push(id);
this[type] = this[type].unique();
return;
}
this.Rem = function(id, type){+
this[type].splice( Filter[type].indexOf(id), 1);
this[type] = this[type].unique();
return;
}
this.SetValue = function(key, value){
this.Options[key] = value;
}
}
...
如果我只是这样做:
AjaxRequest = $.ajax({
...
data: Filter,
...
});
看来 OBJ 最终会像:......用户=1&用户=2&用户=3&....
这导致 PHP 只能看到 Users 的一个值,这将是最后一个值,在本例中为 3。
PHP需要正确查看数组的地方是:..用户[]=1&用户[]=2&用户[]=3&....
知道如何纠正这个问题吗?
Example:
In firebug, my post looks like this:
Clients 1
Clients 10
CompletionStatus pastdue
DateRange 14
Users 2
Users 3
Users 4
and my response looks like this:
page: <?php print_r($_POST) ?>
Array
(
[Users] => 4
[Clients] => 10
[CompletionStatus] => pastdue
[DateRange] => 14
)
答:
2赞
leepowers
12/12/2009
#1
在 javascript 中将 Users 的名称更改为 Users[]。“Users[]”是 javascript 对象的有效属性名称:
var o= { 'Users[]': 'hello user' };
alert(o['Users[]']);
2赞
Alex Sexton
12/12/2009
#2
您是否可以只使用内置的 param 方法?
http://docs.jquery.com/Internals/jQuery.param
这似乎可以做你想做的事。如果你想要最前沿的版本,它在 jQuery 1.4alpha 中还有一些更酷的附加功能。
评论
0赞
Eli
12/12/2009
伟大的思想家的想法是一样的,但出于某种原因,param() 做了同样的事情。只有一个值。
0赞
Jordan Brough
1/29/2010
现在应该与jQuery一起使用>= 1.4。“从 jQuery 1.4 开始,$.param() 方法以递归方式序列化深度对象,以适应现代脚本语言和框架,如 PHP 和 Ruby on Rails api.jquery.com/jQuery.param。”
0赞
Alex Sexton
1/29/2010
是的!它还没有完全发布,但现在 1.4.2 可能不远了——不过在那个版本中,参数方面没有变化。查看 jQuery BBQ 插件,了解可以伴随本机 param 方法的 “deparam” 方法。
评论