Javascript 如何处理纯文本服务器响应?
我是AngularJS的新手,正在构建一个与服务器交互的应用程序。服务器有一个RESTAPI,但对一些方法用纯文本响应,对另一些方法用JSON响应。我使用AngularJS的Javascript 如何处理纯文本服务器响应?,javascript,api,http,rest,angularjs,Javascript,Api,Http,Rest,Angularjs,我是AngularJS的新手,正在构建一个与服务器交互的应用程序。服务器有一个RESTAPI,但对一些方法用纯文本响应,对另一些方法用JSON响应。我使用AngularJS的$resource服务实现了一个简单的http请求方法 但是,当服务器响应是纯文本时,AngularJS中的响应是一个对象,响应词中的每个字符都有一个条目。我怎样才能(以一种好的方式)避开这个问题?理想情况下,我希望能够告诉我的服务何时需要纯文本,何时需要JSON,并在这两种情况下都能得到格式良好的响应。$resource是
$resource
服务实现了一个简单的http请求方法
但是,当服务器响应是纯文本时,AngularJS中的响应是一个对象,响应词中的每个字符都有一个条目。我怎样才能(以一种好的方式)避开这个问题?理想情况下,我希望能够告诉我的服务何时需要纯文本,何时需要JSON,并在这两种情况下都能得到格式良好的响应。$resource是处理Restful对象的方便包装器。它将自动尝试解析为JSON,并根据$resource定义填充对象 您最好使用非restful资源 这是一个较低级别的API,没有如此咄咄逼人的对象映射 e、 g 根据,您可以为资源指定一个自定义操作,该操作可以覆盖默认行为,即将响应从json转换为javascript对象。transformResponse函数的“data”参数将包含您的文本负载 在本例中,transformResponse方法返回一个包含字符串的对象,而不仅仅是字符串本身,因为否则它仍将尝试将字符串转换为数组
var Stub = $resource('/files/:filename', {}, {'getText': {
transformResponse: function(data, headersGetter, status) {
return {content: data};
}
}});
要使用该资源,请调用自定义getText()操作,而不是普通的旧get():
这是一篇旧文章,但我认为它应该有一个新的答案。我也有同样的问题。根据REST,POST操作的返回对象应该是新创建的对象的URI(在我的例子中是一个ID)。Angular在$resource helper中失败,因为它假定所有响应都是JSON。我想定制响应处理程序可以解决这个问题。。我们将对此进行试验。保持联系;)这是有效的,在我的例子中,我是以纯文本/纯文本的形式返回json数据的(故意的),但是$http仍然将其转换为对象而不是纯字符串,所以这个方法工作得最好,而且我仍然可以将我的资源用于其他函数。谢谢这是正确的答案为什么非restful资源??
var Stub = $resource('/files/:filename', {}, {'getText': {
transformResponse: function(data, headersGetter, status) {
return {content: data};
}
}});
Stub.getText({'filename': 'someFile.txt'}, function(response) {
console.info("Content of someFile.txt = " . response.content);
});