Frage $ http.get (...) .success ist keine Funktion


Ich habe diesen Code:

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

In meiner lokalen Umgebung funktioniert ok, aber auf einem Server, gib diesen Fehler zurück:

TypeError: $ http.get (...). Success ist keine Funktion

Irgendwelche Ideen? Vielen Dank


75
2017-12-15 16:51


Ursprung


Antworten:


Das .success Syntax war bis Angular v1.4.3 korrekt.

Für Versionen bis Angular v.1.6 müssen Sie verwenden then Methode. Das then() Methode benötigt zwei Argumente: a success und ein error Callback, der mit einem Antwortobjekt aufgerufen wird.

Verwendung der then() Methode, fügen Sie ein callback Funktion zum zurückgegebenen promise.

Etwas wie das:

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

   },function (error){

   });
}

Siehe Referenz Hier.

Shortcut Methoden sind ebenfalls verfügbar.

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

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

Die Daten, die Sie aus der Antwort erhalten, werden erwartet JSON Format. JSON ist eine gute Art zu transportieren Datenund es ist einfach zu benutzen AngularJS

Der Hauptunterschied zwischen den 2 ist, dass .then() Aufruf gibt a zurück promise (aufgelöst mit einem von a zurückgegebenen Wert callback) während .success() ist eine traditionelle Art der Registrierung callbacks und gibt kein zurück promise.


152
2017-12-15 16:56



Dies könnte überflüssig sein, aber die oben genannte Antwort sagt .then(function (success) und das funktionierte für mich nicht als Angular Version 1.5.8. Stattdessen verwenden response dann innerhalb des Blocks response.data hat mir meine JSON-Daten, nach denen ich gesucht habe.

$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



Wenn Sie versuchen, AngularJs 1.6.6 ab dem 21.10.2017 zu verwenden, funktioniert der folgende Parameter als .success und wurde aufgebraucht. Die Methode .then () benötigt zwei Argumente: eine Antwort und einen Fehlerrückruf, der mit einem Antwortobjekt aufgerufen wird.

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

Der obige Snipit funktioniert für eine Anmeldeseite.


0
2017-10-21 15:02