我使用angular的资源来查询一些数据,问题是查询返回的不是这个:
[
{"id":"5-w2k93ylznp6tj4i"}
{"id":"6-njzmmwcpkw23ayvi"}
]
它的这个:
{"id":"5-w2k93ylznp6tj4i"}
{"id":"6-njzmmwcpkw23ayvi"}
而不是获取一个对象数组,我得到几个对象,这使得角度抛出这个错误:
SyntaxError: Unexpected token {
at Object.parse (native)
我认为错误是因为它不期望另一个对象。该查询是两个项目,如果我只查询一个项目,我只得到一个对象,没有错误。我怀疑当有两个项目时,它不会指望第二个对象,并在第一个对象结束后在第一个大括号中抛出错误。
一些代码:
这是资源:
list: resource (
'/api/products',
{
limit: '@limit',
skip: '@skip',
sort: '@sort'
},
{
query: {
method: 'GET',
interceptor: {
response: function (data) {
console.log('response in interceptor', data);
},
responseError: function (data) {
console.log('error in interceptor', data);
}
},
isArray: false
}
}
)
使用资源的位置:
factory.loadProducts = function(skip, sort){
var data = Api.Product.list.query(
{
limit: appDataVars.limit,
skip: skip,
sort: sort
}, function(response)
{
appDataVars.productsList = response;
}, function(error)
{
console.error(error);
});
return data.$promise;
};
它总是遇到错误回调。
我的问题是我无法修改api,我必须找到一种方法来处理角度的结果集。知道我怎么能做到这一点? 感谢。
答案 0 :(得分:2)
设置资源的查询对象以包含设置为空数组的transformResponse
的属性:
query: {
method: 'GET',
interceptor: {
response: function (data) {
console.log('response in interceptor', data);
},
responseError: function (data) {
console.log('error in interceptor', data);
}
},
isArray: false,
transformResponse: []
}
这将强制将响应视为字符串,然后将处理响应的函数更改为:
function(response)
{
appDataVars.productsList = eval('[' + response.replace(/\n/g, ',') + ']');
}
如果响应字符串没有被对象之间的换行符分隔,则将其更改为response.replace(/}\s*{/g, '},{')
(虽然这是一个非常天真的正则表达式)。
有点hacky,但它应该是一种解决方法,因为你无法修改API。