AngularJS 1.2.0 $http不保留数组元素


AngularJS 1.2.0 $http not preserving array elements

我最近升级到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 的最后一个稳定版本中,保留了 join 的 [],因此在 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 将值作为数组传递?

我认为你的例子根本不应该有效。应该是这样的:

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

自 1.1.1 以来,angular 在解析 url 方面做得很正确。规范说如果你有一个数组,它会像这样解析?join=item1&join=item2。如果数组只有一个项目,它将?join=item1 .

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

总而言之,请尝试'join[]' : ['customer_users'].它可能会起作用。