如何处理纯文本服务器响应?

时间:2013-07-26 17:10:23

标签: javascript api http rest angularjs

我是AngularJS的新手,并且正在构建一个与服务器交互的应用程序。服务器有一个REST API,但是使用纯文本响应某些方法,而使用JSON响应其他方法。我已经使用AngularJS'$resource服务实现了一个简单的http请求方法。

但是,当服务器响应是纯文本时,AngularJS中的响应是一个对象,响应字中的每个字符都有一个条目。我怎样才能解决这个问题(以一种好的方式)?理想情况下,我希望能够告诉我的服务何时期望纯文本以及何时期望JSON,并在两种情况下获得格式良好的响应。

2 个答案:

答案 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);
    });

这是一篇很老的帖子,但我觉得它应该得到一个新答案。