我正在使用像下面那样的角度$资源。
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']
]
howerver,服务器发送:
['welcome','hello']
任何人都知道为什么字符串会分裂?
谢谢
答案 0 :(得分:46)
你遇到了一个有趣的bug来处理angular的$ resource,它无法处理原始的字符串数组;作为一种解决方法,您可以执行以下三种操作之一:
{ "stuff" : [ "your", "strings" ] }
methodName: {method:'GET', url: "/some/location/returning/array", transformResponse: function (data) {return {list: angular.fromJson(data)} }}
然后将其作为data.list
答案 1 :(得分:4)
这适用于RAW响应。这与上面的答案略有不同,但这是通用的,不仅依赖于JSON响应。这基本上会改变对String格式的RAW响应。您需要以 result.responseData
的形式访问$ resource promise结果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() } }
}
});
}
答案 2 :(得分: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]