Как обрабатывать ответ текстового сервера?
Я новичок в AngularJS и создаю приложение, которое будет взаимодействовать с сервером. Сервер имеет REST API, но отвечает на некоторые методы простым текстом, а на других - с JSON. Я применил простой метод HTTP-запроса, используя службу AngularJS $resource
.
Однако, когда ответ сервера является простым текстом, ответ в AngularJS является объектом с одной записью для каждого символа в ответном слове. Как я могу обойти это (в хорошем смысле)? В идеале я хотел бы рассказать о своем сервисе, когда ожидал простой текст и когда ожидать JSON, и получить в любом случае хорошо отформатированный ответ.
Ответы
Ответ 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);
});
Это старый пост, но я решил, что он заслуживает нового ответа.