$ http POST请求响应在服务中返回JSON对象,但是在Controller中调用时未定义

麦可

几乎我有一个服务,该服务包含用于通过AngularJS中的$ http服务进行一些REST方法调用的函数。然后在Controller中访问并调用这些方法。

当通过控制器调用该方法时,服务中打印到控制台的数据就是我所期望的JSON对象。但是一旦该函数将其数据返回给控制器,它就变得不确定。

我不太清楚这是什么原因,并且不希望对为什么会发生这种情况有一些了解,这与范围界定或垃圾收集有关吗?

谢谢!

因此,这里的服务“枢纽”

  this.getAllHubs = function() {
    $http({
      method: 'GET',
      url: 'https://****.com',
    }).then(function successCallback(response) {
      console.log('In hub.js ' + JSON.stringify(response.data));
      this.hubs = response.data;
      return response.data;
    }, function errorCallback(response) {
      // Error response right here
    }); 
  };  

因此,按预期,第一个控制台输出将正确打印对象

这是控制器代码

app.controller('HubCtrl', HubCtrl);

HubCtrl.$inject = ['$scope','hub'];

function HubCtrl($scope,hub) {
  $scope.hubs = hub.getAllHubs();
  console.log('In ctrl ' + $scope.hubs);

  $scope.addHub = function(_hub) {
    console.log('In Ctrl ' + _hub);
    hub.addHub(_hub);
  };  
}
卡泽诺林

您没有从函数返回数据this.getAllHubs

  this.getAllHubs = function() {
    return $http({              // Put a return here
      method: 'GET',
      url: 'https://****.com',
    }).then(function successCallback(response) {
      console.log('In hub.js ' + JSON.stringify(response.data));
      this.hubs = response.data;
      return response.data;
    }, function errorCallback(response) {
      // Error response right here
    }); 
  };  

这还不够,因为返回值实际上是$ q Promise,以使用promise的值:

function HubCtrl($scope,hub) {
  // getAllHubs() now returns a promise
  var hubsPromise = hub.getAllHubs();

  // We have to '.then' it to use its resolved value, note that this is asynchronous!
  hubsPromise.then(function(hubs){
    $scope.hubs = hubs;
    console.log('In ctrl ' + $scope.hubs);
  });

  $scope.addHub = function(_hub) {
    console.log('In Ctrl ' + _hub);
    hub.addHub(_hub);
  };  
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从http POST请求中解组JSON

尽管我在$ http调用中设置了“ {cache:$ templateCache}”,但$ templateCache在指令中未定义

无法在Angular中使用$ http发送POST请求-ReferenceError:未定义$ http

AngualrJS $ http返回未定义?

调用Laravel5中未定义的方法Illuminate \ Http \ Response :: json()

HTTP响应在异步调用返回之前发送

$ http每次启动(离子性)后每次调用时返回错误响应NULL,但是在随后的http发布之后都可以

http响应返回的json对象

http get请求返回未定义

Node.JS http获取请求返回未定义

ngrx EffectsModule使Http服务未定义

API返回数据,但是在未定义的对象中。这是怎么回事?

HTTP请求元素在Node js中始终未定义

当从另一个服务调用服务时,Angular 6 / Typescript HTTP发布请求返回未定义

如何从Angular中的HTTP请求返回JSON响应的特定属性?

$ http get api响应在angularJS中未定义

如何制作和处理一个Http请求,将json文件作为响应在Android中?

用PHP中的json对象响应http获取请求

在PHP中未定义Angular $ http发布请求

从Angular DataFactory中的HTTP POST请求接收未定义的结果

$ http.post给出未捕获的TypeError:无法读取angularjs中未定义的属性“ post”

流星:Http 调用在 Http 响应后返回未定义的响应

在视图调用的函数中返回 HTTP 响应

对象 http 请求中的 Angular JSON 对象

响应在发布请求中未定义(Express)

$http - post - 未处理错误请求错误(未定义)

对 json 文件的 Angular http 请求返回未定义

离子原生 HTTP 返回未定义

HTTP 响应属性未定义