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


108

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 (...). El éxito no es una función

¿Algunas ideas? Gracias


1
¿Qué versión en envm local y en servidor? por cierto, $ http.get return HttpPromise, por lo que debe usar luego en su lugar
Grundy

¿Ha comprobado que todos sus javascripts se cargan en el entorno del servidor?
bansi

7
su then()nosuccess()
Patrick Evans

10
La .successsintaxis era correcta hasta Angular v1.4.3. Vea los documentos antiguos aquí: code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai MATEI

5
y eliminado oficialmente en la
versión 1.6

Respuestas:


212

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

Para versiones hasta Angular v.1.6, debe usar el thenmétodo. El then()método toma dos argumentos: ay successuna errordevolución de llamada que se llamará con un objeto de respuesta.

Usando el then()método, adjunte una callbackfunción al archivo devuelto promise.

Algo como esto:

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

   },function (error){

   });
}

Consulte la referencia aquí.

Shortcut también hay métodos 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 JSONformato. JSON es una excelente forma de transportar datos y es fácil de usar dentro de AngularJS

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


Probé con .then y funciona bien, gracias Alexandru-Ionut Mihai
Alejo Ribes

1
.successy .thentome un parámetro diferente, tenga en cuenta eso
Max Koretskyi

Si reescribe el código existente, puede ser fácil presentar los dos argumentos-funciones (éxito, error) mencionados anteriormente en línea, y no por separado como en el ejemplo.
Tony Sepia

"$ resource (...). get (...). then not is a function" ... ¿Por qué angularJS es tan malo cuando se trata de consistencia?
Hobbamok

8

Esto podría ser redundante, pero la respuesta más votada anterior dice .then(function (success)y eso no funcionó para mí a partir de la versión Angular 1.5.8. En su lugar, use, responseluego, dentro del bloque, response.datame dieron los datos 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.');
});

quiero decir ... lo intentaste success.data? el nombre del parámetro no es tan importante en este caso.
Kevin B

Mi código funciona. Cuando seguí la respuesta anterior, me quedé atascado. También es una respuesta con una forma de obtener los datos y registrarlos en su consola. Esto puede mostrar a los desarrolladores cómo probar sus datos en su navegador. Me llevó aquí exactamente el mismo error en el título de la pregunta.
Ian Poston Framer

código antiguo $http.get('data/data.json').success(function(data) { data = data;}con mi respuesta, un desarrollador ahora sabe data.dataque no puede obtener datos por sí mismo. por lo tanto, mi respuesta es importante para este mensaje de error.
Ian Poston Framer

El nombre de la variable no se hará ninguna diferencia, que podría ser success.datao response.datao cualquier otra cosa. Incluso podrías usar donaldTrump.dataeso también funcionará. Aunque debería usar nombres de variables razonables, no estoy seguro de que este tenga mucho sentido.
Gaurav Arya

Esto se debe a que el objeto de éxito tiene una matriz nombrada dataque contiene los datos que vienen como respuesta de su servidor. necesita acceder a esa matriz de datos, utilizando <yourSuccessObjectName>.data
Gaurav Arya

3

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 llamará 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.