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

Как обрабатывать ответ текстового сервера?

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

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

4b9b3361

Ответ 1

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

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

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

например.

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

Ответ 2

В соответствии с документацией вы указываете настраиваемое действие для ресурса, который может переопределить поведение по умолчанию, которое должно преобразовывать ответ от json в объект javascript. Параметр '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);
    });

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