AngularJS$资源错误-类型错误:对象#<;g>;没有方法';推动';

AngularJS$资源错误-类型错误:对象#<;g>;没有方法';推动';,angularjs,Angularjs,我的控制器文件中有以下内容: var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, { 'getSelect': { method: 'GET', params: { action: 'GetSelect' } } }); Subject.getSelect({ applicationId: 3 }, function (resp) { $scope.testAccounts

我的控制器文件中有以下内容:

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
   'getSelect': { method: 'GET', params: { action: 'GetSelect' } }
});

Subject.getSelect({ applicationId: 3 },
   function (resp) {
      $scope.testAccounts = resp;
      gridData = null;
   }
);
我的服务器代码运行并返回:

[{"id":5,"name":"xxx"},{"id":6,"name":"yyy"}]
但是,我得到以下错误:

TypeError: Object #<g> has no method 'push'
    at copy (http://127.0.0.1:81/Scripts/angular.js:577:21)
TypeError:对象#没有方法“push”
抄袭(http://127.0.0.1:81/Scripts/angular.js:577:21)

有人知道我做错了什么吗?

如果要从服务器返回数组,则需要在资源定义中将参数
isArray
设置为true

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
  'getSelect': { method: 'GET', isArray: true, params: { action: 'GetSelect' } }
});

请参阅:

我知道这篇文章有点过时,但当我今天遇到这个问题时,我找到了一个解决方案。在下面的帖子之后,我实现了joelwreed的解决方案(完成了一半)。在尝试推送之前,它会检查目标是否为数组,从而修复问题


默认情况下,GET需要一个对象{},QUERY需要一个数组[]。在您的例子中,Web API为GET返回一个数组,所以您需要将GET的isArray标志设置为true。如果您的Web API返回了一个对象,那么您就不需要重置该标志,因为它是GET的默认行为。

我刚刚将
MyService.GET(…)
更改为
MyService.query(…)
,因为
.GET()
需要一个对象而
.query()
需要一个数组。

这是一条非常难以理解的异常消息,因为一个很容易犯的错误。不过,这肯定是答案。是的,Angular中的一些错误信息有点模糊。他们已经变得更好了,但是对于那些仍在学习诀窍的人来说,这仍然是一个巨大的痛苦。有同样的问题,并将输出更改为JSON。如果你有这样的奢侈,这似乎是一个更好的选择。