Pregunta $ http.get (...) .success no es una función


tengo este código:

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

En mi entorno local, funciona bien, pero en un servidor, devuelve este error:

TypeError: $ http.get (...). Success no es una función

¿Algunas ideas? Gracias


75
2017-12-15 16:51


origen


Respuestas:


los .success la sintaxis era correcta hasta Angular v1.4.3.

Para versiones hasta Angular v.1.6, debe usar then método. los then() método toma dos argumentos: a success y un error devolución de llamada que se llamará con un objeto de respuesta.

Utilizando el then() método, adjunte un callback función para el devuelto promise.

Algo como esto:

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

   },function (error){

   });
}

Ver referencia aquí.

Shortcut los métodos también están disponibles.

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

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

Se espera que los datos que obtenga de la respuesta estén en JSON formato. JSON es una gran manera de transportar datosy es fácil de usar dentro de AngularJS

La principal diferencia entre los 2 es que .then() la llamada devuelve un promise (resuelto con un valor devuelto por un callback) mientras .success() es la manera más tradicional de registrarse callbacks y no devuelve un promise.


152
2017-12-15 16:56



Esto podría ser redundante, pero la respuesta más votada arriba dice .then(function (success) y eso no funcionó para mí desde la versión Angular 1.5.8. En su lugar use response luego dentro del bloque response.data me dio los datos de JSON que estaba buscando.

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

3
2018-05-04 21:22



Si está intentando utilizar AngularJs 1.6.6 a partir del 21/10/2017, el siguiente parámetro funciona como .success y se ha agotado. El método .then () toma dos argumentos: una respuesta y una devolución de llamada de error que se invocarán con un objeto de respuesta.

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

El snipit anterior funciona para una página de inicio de sesión.


0
2017-10-21 15:02