javascript - limitto - ng class angular 6
Enviar matriz mediante solicitud GET con el servicio $ http de AngularJS (7)
Esto es válido, solo decodifícalo en tu back-end. Casi todos los lenguajes de backend tienen una forma de decodificar un URI. Si no le gusta la forma en que Angular lo está serializando, puede probar jquery''s $ .param ().
Necesito enviar una solicitud GET usando el servicio $http
. Uno de los parámetros será una matriz de ids. La URL se parece a esta mysite.com/items?id[]=1&id[]=2&id[]=3&id[]=4
Intenté este enfoque
$http(
method: ''GET'',
url: ''/items'',
params: {
id: ids // ids is [1, 2, 3, 4]
}
)
pero la URL que utilizo es mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D
Eso es porque Angular está convirtiendo mi valor en una cadena JSON. ¿Hay alguna manera de obtener el comportamiento que quiero?
[Actualizar]
Resolví el problema gracias a la sugerencia de Jonathan usando jQuery $.param()
.
$http(
method: ''GET''
url: ''/items?'' + $.param({id: ids})
)
Siempre que no tenga demasiados identificadores, lo que hará que su url de solicitud sea demasiado larga según su configuración, la siguiente solución funcionará ...
Servicio angular:
$http.get("website.com/api/items?ids=1&ids=2&ids=3");
Controlador WebApi
[HttpGet, Route("api/items")]
public IEnumerable<Item> Get([FromUri] string[] ids)
{
}
También puedes hacer
$http(
method: ''GET'',
url: ''/items'',
params: {
"id[]": ids // ids is [1, 2, 3, 4]
}
)
como se menciona here . Parece más simple.
jQuery es genial, pero si agregas jQuery solo para esto, probablemente puedas hacerlo de una manera no jQuery y guardar algunos bytes preciosos.
Manera no jQuery:
$http(
method: ''GET'',
url: ''/items'',
params: {
id: ids.toString() //convert array into comma separated values
}
)
En su servidor conviértalo de nuevo en una matriz.
P.ej. en 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
}
puede usar $ httpParamSerializer o $ httpParamSerializerJQLike
$http({
method: ''GET'',
url: ''/items'',
data: $httpParamSerializer({''id'':[1,2,3,4]}),
})
La opción paramSerializer se puede configurar para replicar el método de serialización de jQuery :
$http({
url: myUrl,
method: ''GET'',
params: myParams,
paramSerializer: ''$httpParamSerializerJQLike''
});
$http(
method: ''GET'',
url: ''/items'',
params: {
id: JSON.stringify(ids) // ids is [1, 2, 3, 4]
}
)