AngularJS 1.2.0 $ http不保留数组元素

时间:2013-11-15 16:01:20

标签: javascript php angularjs

我最近升级到AngularJS 1.2.0,并且传递打破网站的数组存在问题。在示例$ http请求中,我传递的字段如下:

$http.get({
                url : 'users',
                data : {
                    fields : 'user_id, user_name',
                    conditions : {
                        customer_id : current_site_id
                    },
                    join : ['customer_users']
                }
            });

在1.0.8的最后一个稳定版本中,连接的[]被保留了,因此在php端它显示为数组并且是可迭代的。在1.2.0中,数组被删除,参数通过浏览器传递给服务器:

conditions:{"customer_id":"9a83a3db-673e-407f-9a0d-1f804c4dcd01"}
fields:user_id, user_name
join:customer_users //<---- THIS SHOULD BE AN ARRAY!

因为它不是一个可迭代的对象,所以它打破了php方面。因此,除了将所有数组变量从['xyz']重命名为{'0': 'xyz'}之外,为了模仿数组行为虽然不是最优,但我如何确保angularJS将值作为数组传递?

1 个答案:

答案 0 :(得分:1)

我认为你的榜样根本不适用。它应该是这样的:

$http({
    method: 'GET',
    url : 'users',
    params : {
        fields : 'user_id, user_name',
        conditions : {
            customer_id : current_site_id
        },
        join : ['customer_users']
    }
});

1.1.1以来,angular正确解析了网址。规范说如果你有一个数组,它将被解析为?join=item1&join=item2。如果数组只有一个项目,那么它将是?join=item1

另一方面,jQuery.param()会像这样解析它:?join[]=item1&join[]=item2而且 - 如果我是对的 - 将确保$_GET['join']始终是一个数组。

总而言之,请尝试'join[]' : ['customer_users']。它可能会奏效。