2016-02-05 55 views
0

,我得接近第一呼籲從這裏工作控制器的數據是代碼Angularjs離子JSON對象也不回我試圖獲取數據從Web服務回的數據

$http({ 
method: 'POST', 
url: 'https://url_json.php', 
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset-UTF-8'}, 
transformRequest: function(obj) { 
    var str = []; 
    for(var p in obj) 
    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
    return str.join("&"); 
}, 
    data: paramsVal 
}).then(function(response){ 

$scope.myData = response.data.PlaceDetailsResponse.results[0].first_name; 

console.log('my data',$scope.myData); 
}); 

} 

,但我想所以我讀的服務是最好的選擇,所以在我services.js我控制器之間共享數據:

.factory('userService', function($http){ 
return { 
    getUsers: function(){ 
     return $http.post("https://url_json.php", 
      {entry : 'carlo' , 
      type:'first_name', 
      mySecretCode : 'e8a53543fab6f00ebec85c535e' 
     }).then(function(response){ 

      users = response; 
      return users; 
     }); 
    } 
} 

}) 

但是當我var user = userService.getUsers();把它從控制器控制檯返回以下:

user is [object Object] 

和鉻內檢查元件我只看到:

user is Promise {$$state: Object} 

同樣在當我向下鑽取無極數據值=「」鉻。

任何人都可以看看我的服務,看看我是否做錯了什麼。

謝謝

回答

2

.then返回承諾。你下降了explicit promise construction antipattern

getUsers: function(){ 
    return $http.post("https://url_json.php", 
     {entry : 'carlo' , 
     type:'first_name', 
     mySecretCode : 'e8a53543fab6f00ebec85c535e' 
    }) 
} 

以上就是您所需要的。然後,在您的控制器中:

userService.getUsers() 
.then(function(response) { 
    $scope.data = response.data; // or whatever 
}); 

我建議您看看John Papa AngularJS style guide。他有很多的信息獲取有關業務數據,在控制器使用它,等

0

在你的控制器,你將不得不通過解決從getUsers像下面的承諾回報用戶變量分配:

$scope.user = []; 
$scope.error =""; 

userService.getUsers().then(function(data){ 
    $scope.user = data 
},function(err){ 
    $scope.error = err; 
}); 

希望這有助於。