$ http.get (…) .success는 함수가 아닙니다.


108

이 코드가 있습니다.

app.controller('MainCtrl', function ($scope, $http){
  $http.get('api/url-api')
    .success(function (data, status, headers, config){
     }
}

내 로컬 환경에서는 정상적으로 작동하지만 서버에서는 다음 오류를 반환합니다.

유형 오류 : $ http.get (...). success는 함수가 아닙니다.

어떤 아이디어? 감사


1
로컬 환경 및 서버의 버전은 무엇입니까? BTW, $ http.get 사용할 필요가 있으므로, HttpPromise을 반환 한 후 대신
그런 디

모든 자바 스크립트가 서버 환경에서로드되는지 확인 했습니까?
bansi dec

7
then()하지success()
릭 에반스

10
.success구문은 각도 v1.4.3에 대한 올바른까지했다. 여기에서 이전 문서를 참조하십시오. code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai MATEI

5
공식적으로 v.1.6에서 제거
adamdport

답변:


212

.success구문은 각도 v1.4.3에 대한 올바른까지했다.

Angular v.1.6까지 버전의 경우 thenmethod 를 사용해야 합니다. 이 then()메서드는 두 개의 인수를 취합니다. a successerror응답 객체와 함께 호출되는 콜백입니다.

then()메서드를 사용하여 callback반환 된 promise.

이 같은:

app.controller('MainCtrl', function ($scope, $http){
   $http({
      method: 'GET',
      url: 'api/url-api'
   }).then(function (response){

   },function (error){

   });
}

여기에서 참조를 참조 하십시오.

Shortcut 방법도 사용할 수 있습니다.

$http.get('api/url-api').then(successCallback, errorCallback);

function successCallback(response){
    //success code
}
function errorCallback(error){
    //error code
}

응답에서 얻은 데이터는 JSON형식 이어야 합니다. JSON데이터 를 전송하는 훌륭한 방법이며 AngularJS 내에서 사용하기 쉽습니다.

2 사이의 큰 차이는 즉 .then()호출 반환 promise(A에서 반환 된 값으로 해결 callback하면서) .success()등록하는 전통적인 방법입니다 callbacks및 반환하지 않습니다 promise.


내가 좋아, 감사 Alexandru-누트 미하이 그 때는 함께 tryed 및 작동
알레 베스를

1
.success그리고 .then다른 매개 변수를 취하고 그것을 고려하십시오
Max

기존 코드를 다시 작성하는 경우 위에서 언급 한 두 가지 인수 함수 (성공, 오류)를 인라인으로 표시하는 것이 쉬울 수 있으며 예제에서와 같이 별도로 표시하지 않을 수 있습니다.
Tony Sepia

"$ resource (...). get (...). then is not a function"... angularJS가 일관성 측면에서 왜 그렇게 형편 없습니까?
Hobbamok

8

이것은 중복 될 수 있지만 위의 가장 많이 투표 한 답변에 따르면 .then(function (success)Angular 버전에서는 작동하지 않았습니다 1.5.8. 대신 response블록 내부에서 response.data내가 찾고 있던 json 데이터를 얻었습니다.

$http({
    method: 'get', 
    url: 'data/data.json'
}).then(function (response) {
    console.log(response, 'res');
    data = response.data;
},function (error){
    console.log(error, 'can not get data.');
});

내 말은 ... 시도 했어 success.data? 이 경우 매개 변수 이름은 그다지 중요하지 않습니다.
Kevin B

내 코드가 작동합니다. 위의 답변을 따랐을 때 막혔습니다. 또한 실제로 데이터를 가져 와서 콘솔에 기록하는 방법에 대한 답이기도합니다. 이는 개발자에게 브라우저에서 데이터를 테스트하는 방법을 보여줄 수 있습니다. 나는 질문 제목에서 똑같은 정확한 오류에 의해 여기에서 이끌었습니다.
Ian Poston Framer

$http.get('data/data.json').success(function(data) { data = data;}내 대답이 담긴 오래된 코드 는 이제 개발자 data.data가 데이터를 자체적으로 얻을 수 없다는 것을 알고 있습니다. 따라서 내 대답은이 오류 메시지에 중요합니다.
Ian Poston Framer

변수 이름은 어떤 차이를하지 않습니다, 그것은 수 success.data또는 response.data또는 다른 것. donaldTrump.data그것도 사용할 수 있습니다. 합리적인 변수 이름을 사용해야하지만이 이름이 의미가 있을지 확신 할 수 없습니다.
Gaurav Arya

성공 객체에는 data서버에서 응답으로 오는 데이터를 보유 하는 배열 이 있기 때문 입니다. 당신이 사용하는 데이터 배열이 액세스해야 <yourSuccessObjectName>.data
Gaurav 아리아를

3

2017 년 10 월 21 일 현재 AngularJs 1.6.6을 사용하려는 경우 다음 매개 변수가 .success로 작동하며 고갈되었습니다. .then () 메서드는 응답 객체와 함께 호출되는 응답과 오류 콜백의 두 가지 인수를 사용합니다.

 $scope.login = function () {
        $scope.btntext = "Please wait...!";
        $http({
            method: "POST",
            url: '/Home/userlogin', // link UserLogin with HomeController 
            data: $scope.user
         }).then(function (response) {
            console.log("Result value is : " + parseInt(response));
            data = response.data;
            $scope.btntext = 'Login';
            if (data == 1) {
                window.location.href = '/Home/dashboard';
             }
            else {
            alert(data);
        }
        }, function (error) {

        alert("Failed Login");
        });

위의 스 니핏은 로그인 페이지에서 작동합니다.

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