我的WebAPI2服务返回一个JSON字符串,但$ resource不会解析它

时间:2014-04-01 10:01:46

标签: ajax json angularjs

这是我的资源:

var app, deps;

deps = ['ngGrid', 'getUsers'];

angular.module('getUsers', ['ngResource'])
  .factory('users', function ($resource)
  {
      return $resource('/Admin/GetUsers', {}, {
          query: { method: 'GET', IsArray: true }
      });
  });

然后我添加了代码以尝试添加强制解析的步骤:

$scope.myData = users.query(function(response)
{
    if (typeof (response) == string)
    {
        response = JSON.parse(response);
    }
 });

但它永远不会走得这么远,这就是Chrome中的错误:

Error: [$resource:badcfg] object
http://errors.angularjs.org/1.2.14/$resource/badcfg?p0=array
    at http://localhost:23002/Scripts/angular.js:78:12
    at a.module.factory.f.(anonymous function).p.then.m.$resolved (http://localhost:23002/Scripts/angular-resource.min.js:8:517)
    at deferred.promise.then.wrappedCallback (http://localhost:23002/Scripts/angular.js:11046:81)
    at deferred.promise.then.wrappedCallback (http://localhost:23002/Scripts/angular.js:11046:81)
    at http://localhost:23002/Scripts/angular.js:11132:26
    at Scope.$get.Scope.$eval (http://localhost:23002/Scripts/angular.js:12075:28)
    at Scope.$get.Scope.$digest (http://localhost:23002/Scripts/angular.js:11903:31)
    at Scope.$get.Scope.$apply (http://localhost:23002/Scripts/angular.js:12179:24)
    at done (http://localhost:23002/Scripts/angular.js:7939:45)
    at completeRequest (http://localhost:23002/Scripts/angular.js:8142:7) 

当然我搜索了那个错误,但是我找到了将IsArray设置为true或false的建议,这没什么区别。如果我设置一个断点并在响应字符串上调用JSON.parse,它会变成一个对象数组,就像我想要的那样。所以字符串是完全有效的JSON,但是angular似乎不愿意解析它,它接受它作为字符串然后死掉。

我的控制器很简单:

    public List<ApplicationUser> GetUsers()
    {
        return AdminUsersViewModel.AllUsers;
    }

然后,该方法使用LINQ查询从数据库中获取用户,然后遍历该集合以创建新的集合,因为在我这样做之前,它只是爆炸了。我在浏览器中进行了调用,并看到角度代码中出现的相同字符串。

我需要知道的是,为什么没有角度发现这是一个对象的集合,我怎么能强制它解析字符串,或者改变格式以便角度可以告诉它是什么?

感谢您的光临。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。我认为我读过的帮助说使用IsArray(事后看来,我认为它说不要使用IsArray)。我知道那是非标准的,但这就是我所做的。我运行了非缩小版本,发现了我的错误。更改为isArray,它可以工作。

感谢您寻找: - )