Я использую угловой ресурс для запроса некоторых данных, проблема в том, что то, что возвращает запрос, не таково:
[
{"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, я должен найти способ обработать этот результат в угловом. Любая идея, как я могу это достичь? Благодарю.
Задайте объект запроса ресурса, чтобы он содержал свойство 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, '},{')
(хотя это довольно наивное регулярное выражение).
Это немного хаки, но это должно быть обходным путем, так как вы не можете изменить API.
{"id":"5-yfenlw852lzq6w29","size":32,"price":776,"face":"( ⚆ _ ⚆ )","date":"Wed Dec 30 2015 22:52:21 GMT-0300 (Montevideo Standard Time)"} {"id":"6-44a8vjdttmvrhpvi","size":24,"price":813,"face":"( ︶︿︶)","date":"Tue Dec 22 2015 23:53:07 GMT-0300 (Montevideo Standard Time)"}
?
appDataVars.productsList = [response];
вместо этого `` appDataVars.productsList = response; `