我的控制器文件中有以下内容:
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)
有谁知道我做错了什么?
答案 0 :(得分:49)
如果要从服务器返回数组,则需要在资源定义中将参数isArray
设置为true。
var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
'getSelect': { method: 'GET', isArray: true, params: { action: 'GetSelect' } }
});
答案 1 :(得分:7)
默认情况下,GET需要一个对象{},QUERY需要一个数组[]。在您的情况下,Web API为GET返回一个数组,因此您需要将GET的isArray标志设置为true。如果您的Web API返回了一个对象,那么您就不需要重置该标志,因为它是GET的默认行为。
答案 2 :(得分:5)
我刚刚将MyService.get(...)
更改为MyService.query(...)
,因为.get()
需要一个对象而.query()
需要一个数组。
答案 3 :(得分:4)
我知道这篇文章有点陈旧但我今天遇到这个问题时找到了解决方案。在下面的帖子之后,我实现了joelwreed的解决方案(在线程的一半)。它会在尝试推送之前检查目标是否为数组,从而解决问题。