我正在尝试获取发布/获取请求的响应,在post / get中成功获得响应,但无法从post / get中获得结果。 当我在控制台上打印它显示" undefined"。任何建议,这是我的代码
<div ng-app="myApp" ng-controller="customersCtrl">{{ponies}}</div>
var myApp = angular.module('myApp', []);
myApp.factory('ponyService', function($http) {
var getPonies = function() {
return $http.get('https://www.w3schools.com/angular/customers.php');
};
return {
getPonies: getPonies
};
});
myApp.controller('customersCtrl', function($scope, ponyService) {
ponyService.getPonies().success(function(data) {
$scope.ponies = data;
});
console.log($scope.ponies); // here want to print data because want to use whole controller
});
答案 0 :(得分:1)
那是因为帖子和获取是异步的。
您的console.log
不会等待回复。
将您的控制台置于成功之中,以检查其数据。
试试这个
ponyService.getPonies().success(function(data) {
$scope.ponies = data;
console.log($scope.ponies);
});
或者您可以观察它的变化(但不建议仅用于测试目的),
喜欢这个
ponyService.getPonies().success(function(data) {
$scope.ponies = data;
});
$scope.$watch("ponies",function(val){
if(val)
console.log(val)
})
答案 1 :(得分:0)
这是因为$http
会返回一个承诺(async
请求),所以如果您做了类似的事情
ponyService.getPonies().success(function(data) {
$scope.ponies = data;
});
console.log($scope.ponies);
它将记录未定义,因为您在请求完成之前尝试记录它。因此,您需要在需要访问已解析数据的任何代码中链接到该承诺。喜欢:
ponyService.getPonies().success(function(data) {
$scope.ponies = data;
console.log($scope.ponies);
/* access data or $scope.ponies in here */
});
或者您可以使用承诺
ponyService.getPonies().then(function (data) {
$scope.ponies = data;
console.log($scope.ponies);
/* access data or $scope.data in here */
});