【问题标题】:jQuery, JSON: Javascript obj/array to json for use with jQuery.ajaxjQuery, JSON:用于 jQuery.ajax 的 Javascript obj/array 到 json
【发布时间】:2009-12-11 20:46:06
【问题描述】:

这是一个与此类似的问题: Convert js Array() to JSon object for use with 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 最终会像:...Users=1&Users=2&Users=3&....

这会导致 PHP 只看到用户的一个值,这将是最后一个,在本例中为 3。

我需要 PHP 正确查看数组的地方是:..Users[]=1&Users[]=2&Users[]=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
)

【问题讨论】:

  • 你能举一个'obj'的例子吗?
  • 其实,更好的问题是,你是如何构建 'obj' 的?

标签: jquery json


【解决方案1】:

在 javascript 中将用户的名称更改为用户[]。 'Users[]' 是 javascript 对象的有效属性名称:

var o= { 'Users[]': 'hello user' }; 
alert(o['Users[]']);

【讨论】:

    【解决方案2】:

    你可以只使用内置的参数方法吗?

    http://docs.jquery.com/Internals/jQuery.param

    这似乎是你想要的。如果您想要最前沿的版本,它还在 jQuery 1.4alpha 中添加了一些更酷的功能。

    【讨论】:

    • 伟大的思想都一样,但出于某种原因,param() 做同样的事情。只有一个值。
    • 现在应该使用 jQuery >= 1.4。 “从 jQuery 1.4 开始,$.param() 方法递归地序列化深层对象,以适应现代脚本语言和框架,例如 PHP 和 Ruby on Rails。” - api.jquery.com/jQuery.param
    • 是的!它还没有完全发布,但现在 1.4.2 可能离我们不远了——尽管那个参数前面没有变化。查看 jQuery BBQ 插件,了解可以伴随原生 param 方法的“deparam”方法。
    猜你喜欢
    • 2011-11-04
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多