programing

GET 요청을 통해 Angular를 사용하여 어레이 전송JS의 $http 서비스

abcjava 2023. 3. 7. 20:57
반응형

GET 요청을 통해 Angular를 사용하여 어레이 전송JS의 $http 서비스

GET 요청을 전송하려면$http서비스.파라미터 중 하나는 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's를 사용하여 Jonathan의 제안으로 문제를 해결했습니다.$.param().

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

그냥 해도 돼요

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

여기서 말한 바와 같이간단해 보입니다.

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

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
}

이것은 유효합니다.백엔드에서 디코딩만 하면 됩니다.거의 모든 백엔드 언어에는 URI를 디코딩하는 방법이 있습니다.Angular의 시리얼화 방식이 마음에 들지 않으면 jquery의 $.param()을 사용해 보십시오.

paramSerializer 옵션은 jQuery의 시리얼화 메서드를 복제하도록 설정할 수 있습니다.

$http({
  url: myUrl,
  method: 'GET',
  params: myParams,
  paramSerializer: '$httpParamSerializerJQLike'
});

$httpParamSerializer 또는 $httpParamSerializer를 사용할 수 있습니다.JQLike

$http({
  method: 'GET',
  url: '/items',
  data: $httpParamSerializer({'id':[1,2,3,4]}),
})

ID가 너무 많아 구성에 따라 요청 URL이 너무 길어지지 않는 한 다음 솔루션이 작동합니다.

각도 서비스:

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

WebApi 컨트롤러

[HttpGet, Route("api/items")]
public IEnumerable<Item> Get([FromUri] string[] ids)
{
}

언급URL : https://stackoverflow.com/questions/19957858/send-array-via-get-request-with-angularjs-http-service

반응형