我最近升级到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']
.它可能会起作用。