угловая ошибка ресурса при возврате объектов

0

Я использую угловой ресурс для запроса некоторых данных, проблема в том, что то, что возвращает запрос, не таково:

[
    {"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
    Странное поведение, как вы, API, возвращаете два элемента {{} 'не в массиве? что если вы сделаете это appDataVars.productsList = [response]; вместо этого `` appDataVars.productsList = response; `
  • 0
    Это странно, да, это не мой API, и я не могу изменить ни одной строчки этого, к сожалению. Предлагаемые изменения не будут работать, так как ошибка происходит до этого, даже до перехватчиков в ресурсе
Показать ещё 7 комментариев
Теги:
angular-resource

1 ответ

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, '},{') (хотя это довольно наивное регулярное выражение).

Это немного хаки, но это должно быть обходным путем, так как вы не можете изменить API.

  • 0
    будет ли ваш код работать с этим ответом {"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)"} ?
  • 0
    не уверен, что '}' первого объекта и '{' второго объекта разделены новой строкой.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню