使用AngularJS'$ http服务通过GET请求发送数组

Gio*_*Gpx 48 javascript http angularjs angular-http

我需要使用该$http服务发送GET请求.其中一个参数是一组id.网址看起来像这个mysite.com/items?id[]=1&id[]=2&id[]=3&id[]=4

我试过这种方法

$http(
  method: 'GET',
  url: '/items',
  params: {
    id: ids // ids is [1, 2, 3, 4]
  }
)
Run Code Online (Sandbox Code Playgroud)

但我记下的网址是mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D

那是因为Angular在JSON字符串中转换我的值.有没有办法得到我想要的行为?

[更新]

由于Jonathan建议使用jQuery,我解决了这个问题$.param().

$http(
  method: 'GET'
  url: '/items?' + $.param({id: ids})
)
Run Code Online (Sandbox Code Playgroud)

Ign*_*eso 77

你也可以这样做

$http(
  method: 'GET',
  url: '/items',
  params: {
    "id[]": ids // ids is [1, 2, 3, 4]
  }
)
Run Code Online (Sandbox Code Playgroud)

这里提到的.似乎更简单.

  • 我喜欢这种方法,因为在后端(例如PHP),参数会自动解析为数组,从而避免了解码JSON的额外代码步骤. (3认同)

Saa*_*med 61

$http(
  method: 'GET',
  url: '/items',
  params: {
    id: JSON.stringify(ids) // ids is [1, 2, 3, 4]
  }
)
Run Code Online (Sandbox Code Playgroud)

  • 我比这更喜欢这个答案. (8认同)
  • 这不会发送格式为问题的请求,这是/ items?id [] = 1&id [] = 2&id [] = 3&id [] = 4 (3认同)
  • 到目前为止,这些方法似乎都不适用于WebApi后端.尝试了JSON.stringify,'myvariable []',接下来尝试手动字符串连接 (2认同)

Var*_*ath 10

jQuery很棒但是如果你只为此添加jQuery那么你可以用非jQuery方式来保存一些宝贵的字节.

非jQuery方式:

$http(
  method: 'GET',
  url: '/items',
  params: {
    id: ids.toString() //convert array into comma separated values
  }
)
Run Code Online (Sandbox Code Playgroud)

在您的服务器上将其转换回数组.

例如.在PHP中

$ids = explode(',',Input::get('ids'));

//now you can loop through the data like you would through a regular array. 

foreach($ids as $id)
{
 //do something
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*wny 5

这是有效的,只需在后端解码即可.几乎所有后端语言都有解码URI的方法.如果你不喜欢Angular序列化它的方式,你可以试试jquery的$ .param().