2016-04-20 13 views
-1

Ich erhalte einige Daten über http get ajax.Zugriff auf AJAX-Antwortdaten außerhalb der AJAX-Funktion in angularjs

$.ajax({ 
    type: "GET", 
    url: "/userdata/", 

    success: function(response){ 
     $scope.steps = response.no_of_steps; 
     $scope.calories = response.calories; 
    }, 

    error: function(){ 
     alert("error"); 
    } 
}); 

Wenn ich es auf Konsole aus dem Inneren der Erfolgsfunktion drucken, druckt er den Wert wie:

success: function(response){ 
     var $scope.steps = response.no_of_steps; 
     var $scope.calories = response.calories; 
     console.log($scope.steps, $scope.calories); 
    }, 

Aber wenn ich es auf colsole außerhalb meiner Ajax-Anforderung zu drucken, drucken Sie es nicht definiert. Wie ist das so?

$.ajax({ 
    ... 
}); 
console.log($scope.steps, $scope.calories); 
+1

Zunächst einmal, warum sind Sie jQuery Ajax-Funktionen zu verwenden, wenn Sie [Angular des] (https://docs.angularjs.org/api/ng/service/$ http)? Zweitens, wenn Sie var vor $ scope.steps setzen Sie erstellen eine neue $ Scope-Variable innerhalb dieser Funktion, es wird nicht außerhalb der Funktion (Ihre undefined) existieren. – Astaroth

+0

Sie brauchen die Variable nicht vor Ihrem Variablennamen. Entfernen Sie es und überprüfen Sie erneut – IsraGab

+0

Das Problem ist, dass Sie "$ scope.steps" und "$ scope.calories" vor Ihrem "Erfolg" von Ajax "loggen". Wenn du sie wirklich auf "Konsole" haben willst, musst du warten, bis dein 'Ajax'-Anruf fertig ist. – manish

Antwort

1

dies ist die Fortsetzung meiner comment auf Ihren Beitrag über

könnten Sie tun, dass Sie sich auf hier $scope.$emit("custom-event-name"); von angular, unter Verwendung von tatsächlich $scope.steps und $scope.calories für change beobachten ce Ihre ajax Aufruf abgeschlossen ist dies bedeuten durch $emit von angular

und anschließend durch $scope.$on("custom-event-name", function(){})

und log es dort für dieses Ereignis zu hören, Bitte stellen Sie sicher, Ihre "custom-event-name" in $emit gleich ist und $on

in success Rückruf: initialisieren Sie den Wert und verwenden Sie $emit, um ein Ereignis mit dem Namen initialized wie folgt zu senden: -

$scope.steps = response.no_of_steps; 
$scope.calories = response.calories; 
$scope.$emit("initialized"); 

und dann für dieses Ereignis hören initialized

$scope.$on('initialized', function() { 
    console.log($scope.steps + ' and ' + $scope.calories); 
}); 
+0

Es nichts auf der Konsole – User0706

+0

besten Weg es zu Debugger zu drucken – manish

+0

Wie kann ich das verwenden? – User0706

0

paar Fehler hier .... verwenden $http statt $ajax, zweitens Sie definieren die Variablen in Ihrem success function so der Umfang begrenzt ist, sobald es herauskommt ... definieren Sie Ihre function globally in Ihrem controller und dann greifen Sie darauf in Ihrer Erfolgsfunktion zu.

var $scope.steps => wrong way 
$scope.steps = "something"; => right way. 

Sie brauchen nicht var Schlüsselwort mit $scope in AngularJS anzuhängen.

$scope.steps; 
$scope.calories; 

$.ajax({ 
    type: "GET", 
    url: "/userdata/", 

    success: function(response){ 
     $scope.steps = response.no_of_steps; 
     $scope.calories = response.calories; 
    }, 

    error: function(){ 
     alert("error"); 
    } 
}); 

Verwenden $scope variables, wenn Sie die Ansicht binden möchten und var nicht und ist lokal für die Funktion in deklariert wurde.

+0

Ich habe das versucht, aber es hat nicht funktioniert. Ich entfernte die Var und ersetzte Ajax mit http und definiert die Variablen global, aber es zeigt immer noch undefined – User0706

0

Dies funktioniert für mich, ich will Sie nicht zu nutzen $ Schnipsel in Winkel js seine eine Jquery Funktion empfehlen; Ich habe gehört, $ http ist schneller als $ .ajax Funktion.

Hoffnung für Sie arbeitet diese Option, wenn didnot Arbeit informieren Sie mich bitte

//$scope.tablerows defined outside the function 
$scope.tablerows; 
module='user'; 
url=siteurl+"/admin/"+module+"/list"; 
BlockUi(); 
// $http is ajax call in angular js which is equivalent to $.ajax(); 
$http({ 
    url  : url, 
    method : "GET", 
    data : "", 
    headers : { 'Content-Type':undefined, 
       'Access-Control-Allow-Origin' : '*', 
       'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, PUT', 
       } 
    //responseText is the output of success call 
    }).then(function(responseText){ 
     // assigning the response text on the variable 
     $scope.totaltablerows=responseText.data.response_data; 
     $scope.tablerows=$scope.totaltablerows; 
     UnblockUi(); 
    },function(error){ 
     //alert(JSON.stringify(error)); 
     UnblockUi(); 
     UnknownError(JSON.stringify(error)); 
    }); 
Verwandte Themen