我最近升级到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将值作为数组传递?
答案 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']
。它可能会奏效。