2013-07-26 4 views
13

Я новичок в AngularJS и создаю приложение, которое будет взаимодействовать с сервером. Сервер имеет REST API, но отвечает на некоторые методы простым текстом, а на других - с JSON. Я применил простой метод HTTP-запроса, используя услугу AngularJS '$resource.Как обрабатывать ответ текстового сервера?

Однако, когда ответ сервера является простым текстом, ответ в AngularJS является объектом с одной записью для каждого символа в ответном слове. Как я могу обойти это (в хорошем смысле)? В идеале я хотел бы рассказать о моем сервисе, когда ожидал простой текст и когда ожидать JSON, и получить в любом случае хорошо отформатированный ответ.

+1

У меня точно такая же проблема. Согласно REST, возвращаемым объектом операции POST должен быть URI (или, как в моем случае, идентификатор) вновь созданного объекта. Угловая ошибка здесь в $ resource helper, предполагая, что все ответы будут JSON. Я предполагаю, что пользовательский обработчик ответа может решить эту проблему. Будем экспериментировать с этим. Держите вас в курсе;) – Pepster

ответ

17

$ resource - это удобная обертка для работы с остальными объектами. Он автоматически попытается разобрать как JSON и заполнить объект на основе определения $ resource.

Вам гораздо выгоднее использовать $http service для незабываемых ресурсов.

Это API нижнего уровня, который не имеет такого сопоставления объектов с надлежащими объектами.

например.

$http({method: "GET", url: "/myTextDocURL"}) 
    .success(function(data){ 
     // data should be text string here (only if the server response is text/plain) 
    } 
); 
+0

Почему для нересурсных ресурсов? –

11

Согласно documentation указать пользовательское действие для ресурса, который может переопределить поведение по умолчанию, которое должно преобразовать ответ от JSON к JavaScript Object. Параметр 'data' функции transformResponse будет содержать вашу полезную нагрузку.

В этом случае метод transformResponse возвращает объект, содержащий строку, а не только строку, потому что иначе STILL попытается преобразовать строку в массив.

var Stub = $resource('/files/:filename', {}, {'getText': { 
     transformResponse: function(data, headersGetter, status) { 
      return {content: data}; 
     } 
    }}); 

Для использования ресурса называют ваше пользовательское действие GetText(), а не обычный старый Get():

Stub.getText({'filename': 'someFile.txt'}, function(response) { 
     console.info("Content of someFile.txt = " . response.content); 
    }); 

Это старый пост, но я понял, что заслужил новый ответ.

+0

это работало, и в моем случае я возвращал данные json как обычный/текстовый (специально), но $ http все еще превращал его в объект против простой строки, поэтому этот метод работал лучше всего, плюс я все еще могу использовать свой ресурс для других функции. Спасибо –

+0

Спасибо, работает как шарм! – Tobi

Смежные вопросы