web-dev-qa-db-fra.com

$ http.get (...). le succès n’est pas une fonction

j'ai ce code:

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

Dans mon environnement local, ça va, mais sur un serveur, retournez cette erreur:

TypeError: $ http.get (...). Success n'est pas une fonction

Des idées? Merci

93
Alejo Ribes

La syntaxe .success était correcte jusqu'à Angular v1.4.3.

Pour les versions jusqu'à Angular v.1.6, vous devez utiliser la méthode then. La méthode then() prend deux arguments: un callback success et un error qui sera appelé avec un objet de réponse.

En utilisant la méthode then(), associez une fonction callback à la fonction promise renvoyée.

Quelque chose comme ça:

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

   },function (error){

   });
}

Voir référence ici.

Les méthodes Shortcut sont également disponibles.

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

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

Les données que vous obtenez de la réponse devraient être au format JSON. JSON est un excellent moyen de transporter des données . facile à utiliser dans AngularJS

La principale différence entre le 2 est que l'appel de .then() renvoie un promise (résolu avec une valeur renvoyée par un callback) alors que .success() est un moyen plus traditionnel d'enregistrer callbacks et ne renvoie pas un promise.

191

Cela pourrait être redondant, mais la réponse la plus votée ci-dessus dit .then(function (success) et cela ne fonctionnait pas pour moi à partir de Angular version 1.5.8. À la place, utilisez response puis à l'intérieur du bloc response.data m'a obtenu les données JSON que je cherchais.

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

Si vous essayez d'utiliser AngularJs 1.6.6 à partir du 21/10/2017, le paramètre suivant fonctionne comme .success et a été épuisé. La méthode .then () prend deux arguments: une réponse et un rappel d'erreur qui sera appelé avec un objet de réponse.

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

Le snipit ci-dessus fonctionne pour une page de connexion.

2
Wazzie