50

サービスを使用して GET リクエストを送信する必要があり$httpます。パラメータの 1 つは ID の配列になります。URL は次のようになります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]
  }
)

しかし、私が取得した URL は mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D です

これは、Angular が値を JSON 文字列に変換しているためです。私が望む動作を得る方法はありますか?

[アップデート]

jQueryの$.param().

$http(
  method: 'GET'
  url: '/items?' + $.param({id: ids})
)
4

7 に答える 7

78

あなたもできる

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

ここで述べたように。より簡単に見えます。

于 2014-09-18T19:41:09.680 に答える
62
$http(
  method: 'GET',
  url: '/items',
  params: {
    id: JSON.stringify(ids) // ids is [1, 2, 3, 4]
  }
)
于 2014-01-22T15:31:15.950 に答える
10

jQuery は優れていますが、これだけのために jQuery を追加する場合は、おそらく jQuery 以外の方法を使用して、貴重なバイトを節約できます。

jQuery 以外の方法:

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

サーバー上で配列に変換します。

例えば。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
}
于 2014-03-29T17:20:30.577 に答える
1

paramSerializer オプションを設定して、jQuery のシリアライゼーション メソッドを複製できます

$http({
  url: myUrl,
  method: 'GET',
  params: myParams,
  paramSerializer: '$httpParamSerializerJQLike'
});
于 2016-09-08T13:13:26.883 に答える
1

$httpParamSerializer または $httpParamSerializerJQLike を使用できます

$http({
  method: 'GET',
  url: '/items',
  data: $httpParamSerializer({'id':[1,2,3,4]}),
})
于 2016-07-12T07:19:42.797 に答える
0

ID が多すぎて、構成によってはリクエスト URL が長くなりすぎない限り、次の解決策が機能します...

Angular サービス:

$http.get("website.com/api/items?ids=1&ids=2&ids=3");

WebApi コントローラー

[HttpGet, Route("api/items")]
public IEnumerable<Item> Get([FromUri] string[] ids)
{
}
于 2016-07-16T15:23:54.893 に答える