2014-06-27 90 views
1

好吧,所以我有一個服務具有執行HTTP請求的函數,返回的值設置爲$scope,但是這不起作用,因爲它似乎$scope未在等待AJAX呼叫。我將如何去從控制器外部的服務功能返回AJAX結果?AngularJS從AJAX獲得返回值,這是在控制器外部

例子:

//Controller 
app.controller('Controller', function($scope, $http, Service){ 

    // $scope WILL NOT BE SET TO THE VALUE RETURNED, the returned value is UNDEFINED 
    $scope = Service.getData(); 

} 


// Get server data from service function 
app.service('Service', function ($http){ 

    this.getData = function(){ 
     //Get server data 

     return { data: result } 
    } 
} 
+0

嘗試http://stackoverflow.com/questions/15161537/angularjs-load-data-from-service –

+0

@ArunPJohny大約等待該文章中的服務器響應沒有什麼解釋,但謝謝你。 – user3704920

回答

0

你不能等待Ajax調用。這就是爲什麼AJAx中的「A」代表異步。你可以嘗試syncrhonous調用(應該避免)或者嘗試回調函數來設置你的範圍。

例如,

//service 
this.getData=function(callback){ 
callback({data:result}); 
} 

//controller 
Service.getData(function(response){ 
$scope = response; 
}) 
0

您需要一次Ajax調用完成後運行一個回調函數。所以它看起來像這樣。

//Controller 
app.controller('Controller', function($scope, $http, Service){ 

    // $scope WILL NOT BE SET TO THE VALUE RETURNED, the returned value is UNDEFINED 
    Service.getData(function(data) { 
     $scope = data; 
    }); 

} 


// Get server data from service function 
app.service('Service', function ($http){ 

    this.getData = function(callback){ 
     //Get server data 
     callback({data: result}); 
    } 
}