jQuery、JSON:Javascript obj/数组到 json 以用于 jQuery.ajax

jQuery, JSON: Javascript obj/array to json for use with jQuery.ajax

提问人:Eli 提问时间:12/12/2009 最后编辑:CommunityEli 更新时间:12/12/2009 访问量:889

问:

这是一个与此类似的问题:将 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
)
jquery json

评论

1赞 Darrell Brogdon 12/12/2009
你能举个例子来说明“obj”到底是什么样子的吗?
0赞 Darrell Brogdon 12/12/2009
实际上,更好的问题是,你是如何构建“obj”的?

答:

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” 方法。