2016-10-14 13 views
0

私はチケット管理テーブルを作成していますが、変数をajax関数の外にエクスポートしようとするといくつかの問題があります。角型Ajax、関数の外にある未定義の変数

マイコード:サーバーが応答したときに工場を持つ

app.controller('bodyController',function($scope,$http,$sce){ 
$scope.ticketList = []; 
$http.get("tickets.php") 
.then(function(response) { 
    $scope.ticketModify = response.data; 
    console.log($scope.ticketModify); //this one return the correct data. 
    return $scope.ticketModify; 
}); 
console.log($scope.ticketModify); //this return undefine 

同じ結果私は.thenで実行されるどのような任意の変数

+0

すべてのロジックをコールバック約束のコールバック。 – reptilicus

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+0

このコードは、関数が非同期で実行されているので、GETをconsole.logで続行し、コードを続行できます。 GETがその部分の中でコードを開始し、決して外側に出ない。したがって、console.logは決して再び起こりません。すでに良い答えがあります。 – jedi

答えて

1

コードが物理的に他のコードの上に来るというだけでは、上から下に実行されるわけではありません。このようなあなたのプログラムについて考える:

app.controller('bodyController',function($scope,$http,$sce){ 
$scope.ticketList = []; 
$http.get("tickets.php") 
    .then(handleResponse); 
console.log($scope.ticketModify); //this return undefine 

function handleResponse(response) { 
    $scope.ticketModify = response.data; 
    console.log($scope.ticketModify); //this one return the correct data. 
    return $scope.ticketModify; 
} 

$scope.ticketModifyはまだ定義されていない、なぜあなたが今見ていますか?コードの位置は重要ではありません。重要なのはの実行時間ですです。新しく変更された$scope.ticketModifyをもっと使いたい場合は、別のthenthenにチェーンしてください。あるいは、別の関数を呼び出して、現在のthenから$scope.ticketModifyを渡してください。あなたは何でもすることができます!

0

app.controller('bodyController', function($scope, $http, $sce) { 
 
     $scope.ticketList = []; 
 
     $scope.ticketModify = ""; 
 
     $http.get("tickets.php") 
 
     .then(function(response) { 
 
      $scope.ticketModify = response.data; 
 
      console.log($scope.ticketModify); 
 
      return $scope.ticketModify; 
 
     }); 
 
     console.log($scope.ticketModify); 
 
     // This should print a empty String 
 
    }

tickets.phpへの呼び出しが返された後、それはあなたのために大丈夫働いている場所が、あります。

チケットが動作しない場所は、アクセスしているときにticketModifyが定義されていないことが原因です。 ticket.phpを非同期呼び出しと呼び、すぐに約束が解決された後に移入される変数にアクセスしようとしました。

だから、あなたができるすべてはtickets.phpと成功時に値を更新するために、HTTP呼び出しの前にスコープにticketModifyを宣言することです/そしてtickets.php上にあるべき何をすべきかの