Подтвердить что ты не робот

$ resource.query возвращает разделительные строки (массив char) вместо строки

Я использую ресурс angular $, как показано ниже.

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']

Кто-нибудь знает, почему строки разделяются?

Спасибо

4b9b3361

Ответ 1

Вы столкнулись с забавной ошибкой с ресурсом angular $, где он не может обрабатывать необработанный массив строк; в качестве обходного пути вы можете сделать одну из трех вещей:

  • используйте вместо этого службу $http
  • отправить обернутый объект ответ через сервер, например: { "stuff" : [ "your", "strings" ] }
  • принудительно отсылает данные ответа в вышеупомянутый формат на стороне клиента; $resource, например: methodName: {method:'GET', url: "/some/location/returning/array", transformResponse: function (data) {return {list: angular.fromJson(data)} }}, а затем получить доступ к нему как data.list

См. мой ответ на fooobar.com/questions/90168/...

Ответ 2

Это работает для ответа RAW. Это немного отличается от ответа выше, но это является общим и зависит не только от ответа JSON. Это будет в основном мутировать RAW-ответ в формате String. Вам нужно будет получить результат $resource prom как result.responseData​​strong >

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() } }
        }
    });
}