$ http.get (…) .success non è una funzione


108

ho questo codice:

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

Nel mio ambiente locale, funziona bene, ma in un server, restituisce questo errore:

TypeError: $ http.get (...). Success non è una funzione

Qualche idea? Grazie


1
quale versione su envm locale e su server? btw, $ http.get tornare HttpPromise, quindi è necessario utilizzare poi invece
Grundy

hai controllato che tutti i tuoi javascript vengano caricati nell'ambiente server?
bansi

7
la sua then()nonsuccess()
Patrick Evans

10
La .successsintassi era corretta fino a Angular v1.4.3. Vedi i vecchi documenti qui: code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai MATEI

5
e ufficialmente rimosso nella v.1.6
adamdport

Risposte:


212

La .successsintassi era corretta fino a Angular v1.4.3.

Per le versioni fino a Angular v.1.6, devi usare il thenmetodo. Il then()metodo accetta due argomenti: ae successun errorcallback che verrà chiamato con un oggetto risposta.

Utilizzando il then()metodo, allegare una callbackfunzione al file restituito promise.

Qualcosa come questo:

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

   },function (error){

   });
}

Vedi riferimento qui.

Shortcut sono disponibili anche metodi.

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

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

I dati che ottieni dalla risposta dovrebbero essere in JSONformato. JSON è un ottimo modo per trasportare i dati ed è facile da usare all'interno di AngularJS

La principale differenza tra il 2 è che la .then()chiamata restituisce a promise(risolto con un valore restituito da a callback) mentre .success()è un modo più tradizionale di registrazione callbackse non restituisce a promise.


Ho provato con .then e funziona bene, grazie Alexandru-Ionut Mihai
Alejo Ribes

1
.successe .thenprendi un parametro diverso,
tieni

Se si riscrive il codice esistente, potrebbe essere facile presentare i due argomenti-funzioni (successo, errore) sopra menzionati in linea e non separatamente come nell'esempio.
Tony Sepia

"$ resource (...). get (...). then not is a function" ... Perché angularJS è così schifoso quando si tratta di coerenza?
Hobbamok,

8

Questo potrebbe essere ridondante, ma la risposta più votata sopra dice .then(function (success)e che non ha funzionato per me a partire dalla versione angolare 1.5.8. Invece l'uso responsequindi all'interno del blocco response.datami ha ottenuto i miei dati JSON che stavo cercando.

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

voglio dire ... ci hai provato success.data? il nome del parametro non è così importante in questo caso.
Kevin B

Il mio codice funziona. Quando ho seguito la risposta di cui sopra sono rimasto bloccato. È anche una risposta con un modo per ottenere effettivamente i dati e registrarli sulla tua console. Questo può mostrare agli sviluppatori come testare i propri dati nel browser. Sono stato portato qui dallo stesso esatto errore nel titolo della domanda.
Ian Poston Framer

vecchio codice $http.get('data/data.json').success(function(data) { data = data;}con la mia risposta uno sviluppatore ora sa che data.datanon può semplicemente ottenere dati da solo. quindi la mia risposta è importante per questo messaggio di errore.
Ian Poston Framer

Il nome della variabile non farà alcuna differenza, potrebbe essere success.datao response.datao qualsiasi altra cosa. Potresti anche usare anche donaldTrump.dataquello funzionerà. Anche se dovresti usare nomi di variabili ragionevoli, non sono sicuro che questo abbia molto senso.
Gaurav Arya

Questo perché l' oggetto successo ha un array denominato datache contiene i dati provenienti come risposta dal tuo server. è necessario accedere a tale array di dati, utilizzando <yourSuccessObjectName>.data
Gaurav Arya

3

Se stai tentando di utilizzare AngularJs 1.6.6 a partire dal 21/10/2017, il seguente parametro funziona come .success ed è stato esaurito. Il metodo .then () accetta due argomenti: una risposta e un callback di errore che verrà chiamato con un oggetto risposta.

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

Lo snipit sopra funziona per una pagina di accesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.