$resource.query返回拆分的字符串(字符数组)而不是字符串。

28

我正在使用类似下面这样的angular $resource。

angular.module('app')
.factory('data', function ($resource) {

    var Con = $resource('/api/data', {}, {
        update : {method : 'PUT'}
    });

    return {     

        getData : function (user_id, callback) {

             return Con.query({user_id : user_id}, function (data) {
                 cb(data); // (breakpoint) HERE data is not good
             }, function (err) {
                 cb(err);
             }).$promise;
         }

   }; 
});

当我在数据上设置断点时,这就是我得到的结果:

[
    ['w','e','l','c','o','m','e'],
    ['h','e','l','l','o']
] 

然而,服务器发送:

['welcome','hello']

有人知道为什么这些字符串会被分割吗?

谢谢

3个回答

46
您遇到了一个有趣的问题,即angular的$resource无法处理原始字符串数组。作为解决方法,您可以选择以下三种之一:
  • 改用$http服务
  • 通过服务器发送包装后的对象响应,例如:{"stuff":[ "your", "strings" ]}
  • 在客户端将响应数据强制转换为上述格式;$resource示例:methodName: {method:'GET', url: "/some/location/returning/array", transformResponse: function (data) {return {list: angular.fromJson(data)} }},然后作为data.list访问它
请参见我的答案:https://dev59.com/8GUo5IYBdhLWcg3w2CWJ#22491240

6
如果服务器返回一个JSON字符串,这个问题和回答同样适用。 - Claudiu

6

这适用于原始响应。这是与上面的答案略有不同的版本,但它是通用的,不仅依赖于JSON响应。这将基本上将原始响应转变为字符串格式。您需要访问$resource承诺结果作为result.responseData

getAPIService() {
    return this.$resource(this.apiUrl, {}, {
        save: {
            method: 'POST',
            headers: {
                'Accept': 'text/plain, text/xml',
                'Content-Type': 'text/xml'
            },
            transformResponse: function (data) { return { responseData: data.toString() } }
        }
    });
}

0

使用 $http 替代 $resource

getRiskCount: function (Id,Type) {
            var deferred = $q.defer();
            var resource = $resource(urlResolverFactory.hostUrl() + '/api/getstudentriskcount',
                {}, { query: { method: 'GET', isArray: false } }
             );
             resource.query({ userId: Id,userType: Type }, function (data) {
                 deferred.resolve(data);
              }, function (error) {
                  deferred.reject(error);
              });
             return deferred.promise;
          }

  Result - ['4','5','6','7']

 getRiskCount: function (Id,Type) {
                var apiUrl = urlResolverFactory.hostUrl() + '/api/getstudentriskcount';
                apiUrl += '?userId=' + Id,
                apiUrl += '&userType=' + Type;

                var deferred = $q.defer();
                var promise = $http({
                    method: 'GET',
                    url: apiUrl,
                }).success(function (data) {
                    deferred.resolve(data);
                }).error(function (data, status) {

                    deferred.reject(data);
                });
                return promise;
            }

  Result - [4567]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接