$http.get(...).sucesso não é uma função

tenho este código:

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

No meu ambiente local, funciona bem, mas num servidor, devolva este erro:

TypeError: $http.get(...).sucesso não é uma função

Alguma ideia? Obrigado

Solução

A sintaxe `.sucesso' estava correcta até Angular v1.4.3.

Para versões até à Angular v.1.6, é necessário utilizar o método then. O método "then()then()toma dois argumentos: um sucesso e um erro de chamada de retorno que será chamado com um objecto de resposta.

Utilizando o método then(), anexar uma função callback' aopromise' devolvido.

Algo parecido com isto:

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

   },function (error){

   });
}

Ver referência aqui.

Estão também disponíveis métodos de "corte de corda".

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

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

Espera-se que os dados obtidos a partir da resposta estejam no formato JSON. JSON é uma óptima forma de transporte de dados, e é fácil de utilizar dentro de AngularJS.

A maior diferença entre os 2 é que .then()chamada devolve um promise (resolvido com um valor devolvido de um callback) enquanto que .success() é uma forma mais tradicional de registar callbacks e não'não devolve um promise.

Comentários (4)

Isto pode ser redundante, mas a resposta mais votada acima diz .then(function (success) e isso não't funciona para mim a partir da versão angular 1.5.8. Em vez disso, utilize response e depois dentro do bloco response.data consegui os meus dados json que estava à procura.

$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.');
});
Comentários (5)

Se estiver a tentar utilizar AngularJs 1.6.6 a partir de 21/10/2017 o parâmetro seguinte funciona como .success e foi esgotado. O método .then() leva dois argumentos: uma resposta e uma chamada de retorno de erro que será chamada com um objecto de resposta.

 $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");
        });

O trecho acima funciona para uma página de login.

Comentários (0)