open limitto javascript http angularjs angular-http

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]}), })



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