Ich muss eine GET-Anfrage mit dem $http
-Dienst senden. Einer der Parameter ist ein Array von IDs. Die URL sieht folgendermaßen aus: mysite.com/items?id[?==&id[?==&&[..==3&id[..=4
Ich habe diesen Ansatz ausprobiert
$http(
method: 'GET',
url: '/items',
params: {
id: ids // ids is [1, 2, 3, 4]
}
)
aber die URL, die ich beobachte, ist mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D
Weil Angular meinen Wert in eine JSON-Zeichenfolge konvertiert. Gibt es eine Möglichkeit, das gewünschte Verhalten zu erhalten?
[Update]
Ich habe das Problem dank Jonathans Vorschlag mit jQueries $.param()
gelöst.
$http(
method: 'GET'
url: '/items?' + $.param({id: ids})
)
$http(
method: 'GET',
url: '/items',
params: {
id: JSON.stringify(ids) // ids is [1, 2, 3, 4]
}
)
Sie können es auch einfach tun
$http(
method: 'GET',
url: '/items',
params: {
"id[]": ids // ids is [1, 2, 3, 4]
}
)
wie erwähnt hier . Scheint einfacher.
jQuery ist großartig, aber wenn Sie jQuery dazu hinzufügen, könnten Sie wahrscheinlich eine andere Art von jQuery verwenden und wertvolle Bytes sparen.
Nicht jQuery Weg:
$http(
method: 'GET',
url: '/items',
params: {
id: ids.toString() //convert array into comma separated values
}
)
Konvertieren Sie es auf Ihrem Server wieder in ein Array.
Z.B. in 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
}
Dies ist gültig, decodiere es einfach in deinem Backend. Fast alle Backendsprachen können einen URI dekodieren. Wenn Ihnen die Serialisierung von Angular nicht gefällt, können Sie $ .param () von jquery ausprobieren.
sie können $ httpParamSerializer oder $ httpParamSerializerJQLike verwenden
$http({
method: 'GET',
url: '/items',
data: $httpParamSerializer({'id':[1,2,3,4]}),
})
$http({
url: myUrl,
method: 'GET',
params: myParams,
paramSerializer: '$httpParamSerializerJQLike'
});
Solange Sie nicht zu viele IDs haben, wird die Anforderungs-URL je nach Konfiguration zu lang sein.
Winkel-Service:
$http.get("website.com/api/items?ids=1&ids=2&ids=3");
WebApi Controller
[HttpGet, Route("api/items")]
public IEnumerable<Item> Get([FromUri] string[] ids)
{
}