2016-03-23 62 views
0

我想訪問響應successCallback(response)

var list_of_user = $http({ 
    method: 'GET', 
    url: '/users/' 
}).then(function successCallback(response) { 
    $scope.all_users = response.data; 

}, function errorCallback(response) { 
    console.log(response); 
}); 

console.log("$scope.all_users ", $scope.all_users) 

是undefiend

我可以訪問HTML $scope.all_users,但我怎麼能訪問$scope.all_users在控制器?

+1

相同的控制器或不同的控制器? –

+0

同一控制器。但我不知道爲什麼我一直未定義 – TheNone

+4

,它只是使用'$ scope.all_users'來訪問,但要確保在你訪問ajax之前完成調用。 –

回答

1

$http是異步的,console.log在實際請求完成之前被執行。

正如您在評論中所定義的那樣,您希望比較兩個響應,您可以通過簡單地放置一個將等待兩個請求完成的標誌來完成此操作。

var done = 0; 
var onRequestFinishes = function() { 
    done += 1; 
    if (done < 2) { 
     return; // one of both request is not completed yet 
    } 

    // compare $scope.response1 with $scope.response2 here 
} 

併發送第一請求,並保存響應於$scope.response1並調用之後onRequestFinishes

$http({ 
    method: 'GET', 
    url: '/users/' 
}).then(function successCallback(response) { 
    $scope.response1 = response.data; 
    onRequestFinishes(); 
}, function errorCallback(response) { 
    console.log(response); 
}); 

同樣發出第二個請求

$http({ 
    method: 'GET', 
    url: '/users/' 
}).then(function successCallback(response) { 
    $scope.response2 = response.data; 
    onRequestFinishes(); 
}, function errorCallback(response) { 
    console.log(response); 
}); 
1

對於請求處理,您可以創建單獨的諾言鏈,並使用$q.all()執行代碼時,所有的承諾都解決了。

var request1 = $http.get('/users/').then(function(response) 
{ 
    console.log('Users: ', response.data); 
    return response.data; 
} 

var request2 = $http.get('/others/').then(function(response) 
{ 
    console.log('Others: ', response.data); 
    return response.data; 
} 

$q.all([request1, request2]).then(function(users, others) 
{ 
    console.log('Both promises are resolved.'); 
    //Handle data as needed 
    console.log(users); 
    console.log(others); 
}