【问题标题】:Angular.js Error: Expected response to contain an array but got an object although isArray is set to falseAngular.js 错误:预期的响应包含一个数组,但得到了一个对象,尽管 isArray 设置为 false
【发布时间】:2014-02-06 20:50:52
【问题描述】:

我有一个角度资源工厂,它返回一个 JSON 对象,看起来像这样:

angular.module('myApp').factory('resourceProvider', function ($resource, $http) {
return {
Attribute: $resource('http://localhost:49980/api/Attribute/:id', 
{ id: '@id' }, { query: { method: 'GET', isArray: false } }),     
};
});

当我像这样“查询”资源时:

resourceProvider.Attribute.query(function (data) {
  $scope.variable = data;
});

我得到:错误:[$resource:badcfg] 资源配置错误。预期的响应包含一个数组,但得到了一个对象。

这对我来说似乎很奇怪,因为我将 isArray 设置为 false。此外,该代码在其他电脑上运行良好。因此,如果有人知道错误可能来自哪里,我将非常感激。

【问题讨论】:

  • 你不能只为一个对象属性分配一个方法,你需要创建一个函数并返回它。
  • 抱歉,您误会了我的意思。我在查询资源的地方添加了代码

标签: javascript angularjs


【解决方案1】:

问题解决了。 db 身份验证存在问题,错误消息恰好是 JSON 对象。所以实际上返回的是一个 JSON 对象而不是一个数组。

【讨论】:

  • 我也有这种情况,但是 JSON 对象 是服务器错误的预期响应。如果 $resource 可以被配置为处理这个问题而不通过 Angular 的 $log 服务发送错误,那就太好了。它特别给我们的测试增加了噪音,我们故意确认错误处理应该如何工作。
【解决方案2】:

问题1:你为什么使用 angulars $resource-service 而不是 $http-service?
问题2:如果要使用$resource,为什么要覆盖$resource 的默认行为?
Angular Docs

我不确定,但是你有错别字

return {
Attribute: $resource('http://localhost:49980/api/Attribute/:id', 
{ id: '@id' }, { query: { method: 'GET', isArray: false } }),     
};

【讨论】:

  • 感谢您的回答。但是您一定读过一遍代码实际上没有任何问题。该项目在其他电脑上运行良好。该错误仅发生在我的计算机上(在我从颠覆中检查出来之后)。所以我的问题是,是否有人知道问题出在哪里。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2014-05-14
相关资源
最近更新 更多