[英]Angularjs $http.get in a factory doesn't return valid JSON but a different object
當我從工廠調用$http.get
,它不會返回我需要的JSON對象,而是返回另一個對象。
這是我的代碼:
var cart = angular.module('cart', []);
cart.factory('getItems',['$http', function($http){
return{
get:$http.get('index.php').
success(function(data){
return data;
})
}
}]);
cart.controller("TableCtrl", ['$scope', 'getItems', function($scope, getItems){
console.log(getItems.get);
}]);
現在,這是應該返回的JSON對象:
[{"id":"1","name":"Cap"},{"id":"2","name":"Coat"},{"id":"3","name":"Shoes"}]
這就是我在console.log中得到的
d {$$state: Object, success: function, error: function, then: function, catch: function…}
如果我在控制器中運行$http.get
一切都可以正常運行,但是如果我將其放置在工廠中,則不會。
它正在返回一個承諾,您需要解決
在您的控制器中。
getItems.get().then(function(response) {
console.log(response.data)
});
詳細信息,請參閱Promise Api
$ http.get返回一個承諾,而不是數據本身。 您當前對成功功能的使用不會取回數據。
在您的工廠中:
return{ get: $http.get('myurl')};
然后食用它應該是:
myFactory.get().success(response){
var mydata = response.data;
}
成功只是諾言的補充。 我喜歡只使用.then就像標准的,未經修飾的承諾。
當我第一次聽說Promise時,我認為它意味着您可以使用它而不必在使用方提供任何類似於回調的代碼。 事實並非如此,但諾言仍然超贊且非常強大。 最酷的事情是您可以兌現承諾,任何人都可以在承諾中添加.then。 異步請求完成后,執行此操作的人將立即執行其代碼,如果異步請求已完成,則立即執行。 因此,promise使您不必擔心異步行為,但仍然必須使用基本上是其更強大的回調版本的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.