需要角度响应的post / get请求超出范围,有什么建议吗?

时间:2017-03-08 06:53:57

标签: javascript angularjs

我正在尝试获取发布/获取请求的响应,在post / get中成功获得响应,但无法从post / get中获得结果。 当我在控制台上打印它显示" undefined"。任何建议,这是我的代码

的index.html:

<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

});

2 个答案:

答案 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 */
  });