我是AngularJS的新手,并且正在构建一个与服务器交互的应用程序。服务器有一个REST API,但是使用纯文本响应某些方法,而使用JSON响应其他方法。我已经使用AngularJS'$resource
服务实现了一个简单的http请求方法。
但是,当服务器响应是纯文本时,AngularJS中的响应是一个对象,响应字中的每个字符都有一个条目。我怎样才能解决这个问题(以一种好的方式)?理想情况下,我希望能够告诉我的服务何时期望纯文本以及何时期望JSON,并在两种情况下获得格式良好的响应。
答案 0 :(得分:20)
$ resource是一个使用Restful对象的便利包装器。它会自动尝试解析为JSON并根据$ resource定义填充对象。
最好不要将$http service用于非宁静资源。
这是一个没有这种霸道对象映射的低级API。
e.g。
$http({method: "GET", url: "/myTextDocURL"})
.success(function(data){
// data should be text string here (only if the server response is text/plain)
}
);
答案 1 :(得分:16)
根据documentation,您可以为资源指定自定义操作,该操作可以覆盖将响应从json转换为javascript对象的默认行为。 transformResponse函数的'data'参数将包含您的文本有效负载。
在这种情况下,transformResponse方法返回一个包含字符串的对象,而不仅仅是字符串本身,否则它仍然会尝试将字符串转换为数组。
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);
});
这是一篇很老的帖子,但我觉得它应该得到一个新答案。