2016-04-20 8 views
-1

http get ajaxでデータを取得しています。anglejsのajax関数の外側にあるajaxレスポンスデータにアクセスする方法

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

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

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

私は成功関数内からコンソールにそれを印刷した場合、それは次のように値を出力します。

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

しかし、私は私のAJAX要求外colsoleでそれを印刷する場合、それは未定義印刷します。それはどうですか?

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

まずご連絡ください場合は、この

希望はあなたのために働く[角度の](https://docs.angularjs.org/api/ng/service/$ http)? 第2に、$ scope.stepsの前にvarを置くと、その関数内に新しい$ scope変数が作成されますが、関数の外には存在しません(定義されていません)。 – Astaroth

+0

変数名の前にvarは必要ありません。それを削除してもう一度確認してください – IsraGab

+0

問題はajaxの 'success'の前に' logging' '$ scope.steps'と' $ scope.calories'です。あなたは本当に私は – manish

答えて

1

これは

上記のあなたのポストに私 commentの続きです

あなたはここでangular$scope.$emit("custom-event-name");、 を使用することにより、あなたが実際にchangeため$scope.steps$scope.caloriesを見ていることを行うことができますCEあなたajaxコールは、あなたの"custom-event-name"$emitで同じであることを確認してくださいと$on

で、angular

$emitを使用してこれを意味し、その後$scope.$on("custom-event-name", function(){})

logがそれによってそのイベントをリッスン完了しますsuccessコールバック:$emitを使用して値を初期化し、initializedというイベントを発生させます。 -

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

し、そのイベントこれは、私の作品initialized

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

その印刷しないものを見せていますか? – User0706

+0

最良の方法で未定義 – manish

+0

を使用するためのコンソール – User0706

0

こちらのミスのカップル....第二に、あなたのsuccess function内のあなたの変数を定義している、代わりに$ajax$httpを使用し、それはそれから出てきたら、その適用範囲は限られている...あなたのcontrollerであなたのfunction globallyを定義しますあなたの成功関数の中でそれにアクセスしてください。

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

あなたはangularjsに$scopevarキーワードを追加する必要はありません。

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

使用$scope variablesビューにバインドするとvarにはない、それがで宣言された関数にローカルである場合。

+0

私はこれを試しましたが、うまくいきませんでした。私はVARを取り除き、httpでAJAXを交換し、グローバル変数を定義したが、それはまだそれは私がそれを使用することができますどのように「デバッガ」 – User0706

0

のために聞く、私はあなたがそのjqueryの機能JS角度で$アヤックスの使用をしないようにお勧めしたいです。私は$ httpが$ .ajax関数より速いと聞いた。 didnot仕事はあなたが持っているとき、なぜあなたはjQueryのAjaxの機能を使用している、すべての私の

//$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)); 
    }); 
関連する問題