$ http.get 요청에 데이터를 전달하는 AngularJS


577

http POST 요청을 수행하는 기능이 있습니다. 코드는 아래와 같습니다. 이것은 잘 작동합니다.

 $http({
   url: user.update_path, 
   method: "POST",
   data: {user_id: user.id, draft: true}
 });

http GET에 대한 다른 기능이 있으며 해당 요청에 데이터를 보내려고합니다. 그러나 나는 그 옵션을 얻지 못했다.

 $http({
   url: user.details_path, 
   method: "GET",
   data: {user_id: user.id}
 });

의 구문 http.get

get (url, 구성)

답변:


942

HTTP GET 요청은 서버에 게시 할 데이터를 포함 할 수 없습니다. 그러나 요청에 쿼리 문자열을 추가 할 수 있습니다.

angular.http는이라는 옵션을 제공합니다 params.

$http({
    url: user.details_path, 
    method: "GET",
    params: {user_id: user.id}
 });

참조 : http://docs.angularjs.org/api/ng.$http#gethttps://docs.angularjs.org/api/ng/service/$http#usage ( params매개 변수 표시)


17
이것은 약속을 돌려 줄 것입니다
코너 Leech

1
약속이있는 코드 : $ http ({method : 'GET', url : '/ someUrl'}). success (function (data, status, headers, config) {//이 콜백은 // 응답이있을 때 비동기 적으로 호출됩니다}). error (function (data, status, headers, config) {// 오류가 발생하면 // 비동기 적으로 호출됩니다. // 서버가 오류 상태로 응답을 반환합니다.});
Ehud Grand

130
Angular는의 기능도 제공합니다 $http.get(url.details_path, {params: {user_id: user.id}}).
enpenax

15
HTTP 동사간에 객체 키를 일관되게 유지하는 것이 좋을 것입니다 ... POST에 대한 데이터와 GET에 대한 매개 변수를 갖는 것은 반 직관적입니다.
Hubert Perron

7
@HubertPerron 실제로 이것은 다른 것들이기 때문에 직관이 아닙니다 : DATA는 객체 / 모델을 나타낼 수 있고 중첩되어 POST 헤더의 일부가 될 수 있습니다 ... PARAMS는 GET URL에 추가 할 수있는 것을 나타냅니다. URL에서 쿼리 문자열의 일부입니다. 당신이 다른 것을하고 있다는 사실을 알기 때문에 이름이 다른 것이 좋습니다.
Jos

520

다음과 같이 매개 변수를 직접 전달할 수 있습니다.$http.get()

$http.get(user.details_path, {
    params: { user_id: user.id }
});

2
이것은 작동하지만 params 객체는 String으로 변환됩니다. 원본 객체는 어떻게 유지합니까?
wdphd

13
@wdphd HTTP 고유의 특성으로 쿼리 문자열로 인코딩됩니다.
Uli Köhler

1
@Uli Köhler : 그렇습니다. params 데이터 유형을 지정할 수있는 UI 라우터 라인을 생각하고있었습니다. 백엔드에서 간단한 parseInt로 이것을 수정했습니다.
wdphd

2
주어진 URL에 GET 매개 변수를 추가하고 완벽하게 작동하는 경우 올바른 솔루션입니다.
enpenax


43

AngularJS v1.4.8 부터 get(url, config) 다음과 같이 사용할 수 있습니다 .

var data = {
 user_id:user.id
};

var config = {
 params: data,
 headers : {'Accept' : 'application/json'}
};

$http.get(user.details_path, config).then(function(response) {
   // process response here..
 }, function(response) {
});

1
그러나이 데이터는 여전히 요청 본문에 없습니다.
naXa

@naXa GET은 규칙에 의해서만 URL 매개 변수 여야하므로 많은 프레임 워크에서는 기술적으로 작동하고 이해가 되더라도 모범 사례를 적용 할 수 없습니다.
Christophe Roussy

1
AngularJS 문서 만이 간단한 예제를 제공 할 수 있다면!
Norbert Norbertson

@ Arpit Aggarwal 당신은 golang 웹 서버와 vue.js에 대한 비슷한 질문을 보았습니까? stackoverflow.com/questions/61520048/…
user2315094

33

GET 요청에서 매개 변수 및 헤더를 보내려는 사람들을위한 솔루션

$http.get('https://www.your-website.com/api/users.json', {
        params:  {page: 1, limit: 100, sort: 'name', direction: 'desc'},
        headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
    }
)
.then(function(response) {
    // Request completed successfully
}, function(x) {
    // Request error
});

전체 서비스 예는 다음과 같습니다

var mainApp = angular.module("mainApp", []);

mainApp.service('UserService', function($http, $q){

   this.getUsers = function(page = 1, limit = 100, sort = 'id', direction = 'desc') {

        var dfrd = $q.defer();
        $http.get('https://www.your-website.com/api/users.json', 
            {
                params:{page: page, limit: limit, sort: sort, direction: direction},
                headers: {Authorization: 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
            }
        )
        .then(function(response) {
            if ( response.data.success == true ) { 

            } else {

            }
        }, function(x) {

            dfrd.reject(true);
        });
        return dfrd.promise;
   }

});

응답 데이터는 컨트롤러에서 어떻게 사용됩니까? 감사.
Floris

3

URL 끝에 매개 변수를 추가하기 만하면됩니다.

$http.get('path/to/script.php?param=hello').success(function(data) {
    alert(data);
});

script.php와 페어링 :

<? var_dump($_GET); ?>

다음 자바 스크립트 경고가 발생합니다.

array(1) {  
    ["param"]=>  
    string(4) "hello"
}

2
$ http는 이스케이프 처리합니까?
Michael Cole

2
이것도 작동하지만 이것의 문제는 여러 매개 변수가있을 때 URL 끝에 추가하는 것이 고통스럽고 변수 이름을 변경하면 URL에서 와서 변경해야한다는 것입니다.
user3718908

알아. 그것은 당신이 정기적으로 그것을 할 수 있음을 보여주는 더 많은 데모였습니다 . 반드시 추천하지는 않습니다. (여기서 '일반적인 방법'은 PHP로 몇 년 동안 어떻게 해왔는지 의미합니다)
Jeffrey Roosendaal

2

다음은 ASP.NET MVC에서 angular.js를 사용하는 매개 변수가있는 HTTP GET 요청의 전체 예입니다.

제어 장치:

public class AngularController : Controller
{
    public JsonResult GetFullName(string name, string surname)
    {
        System.Diagnostics.Debugger.Break();
        return Json(new { fullName = String.Format("{0} {1}",name,surname) }, JsonRequestBehavior.AllowGet);
    }
}

전망:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script type="text/javascript">
    var myApp = angular.module("app", []);

    myApp.controller('controller', function ($scope, $http) {

        $scope.GetFullName = function (employee) {

            //The url is as follows - ControllerName/ActionName?name=nameValue&surname=surnameValue

            $http.get("/Angular/GetFullName?name=" + $scope.name + "&surname=" + $scope.surname).
            success(function (data, status, headers, config) {
                alert('Your full name is - ' + data.fullName);
            }).
            error(function (data, status, headers, config) {
                alert("An error occurred during the AJAX request");
            });

        }
    });

</script>

<div ng-app="app" ng-controller="controller">

    <input type="text" ng-model="name" />
    <input type="text" ng-model="surname" />
    <input type="button" ng-click="GetFullName()" value="Get Full Name" />
</div>

IMHO 구문 params은 '수동'URL 연결보다 오류가 덜 발생합니다
Christophe Roussy

1

매개 변수로 get 요청을 보내려면

  $http.get('urlPartOne\\'+parameter+'\\urlPartTwo')

이것에 의해 당신은 당신의 자신의 URL 문자열을 사용할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.