119 votes

$ 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

230voto

Mihai Alexandru-Ionut Points 29165

L' .success syntaxe est correcte jusqu'à Angulaires v1.4.3.

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

À l'aide de l' then() méthode, joindre une callback fonction retourné promise.

Quelque chose comme ceci:

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

   },function (error){

   });
}

Voir la référence ici.

Shortcut méthodes 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 à partir de la réponse devrait être, en JSONformat. JSON est un excellent moyen de transport de données, et il est facile à utiliser dans AngularJS

La principale différence entre les 2 est que, .then() appel renvoie une promise (résolu avec une valeur de retour à partir d'un callback), tandis que .success() est une méthode plus traditionnelle de l'enregistrement d' callbacks et ne retourne pas une promise.

9voto

Ian Poston Framer Points 198

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 la version angulaire 1.5.8 . Au lieu de cela, 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.');
});
 

4voto

Wazzie Points 190

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X