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

Per*_*son 14 javascript api rest http angularjs

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

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

Ian*_*rty 20

$ resource是一个使用Restful对象的便利包装器.它会自动尝试解析为JSON并根据$ resource定义填充对象.

对于非静态资源,使用$ http服务会好得多.

这是一个没有这种霸道对象映射的低级API.

例如

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


mek*_*azu 16

根据文档,您为资源指定了一个自定义操作,该操作可以覆盖将响应从json转换为javascript对象的默认行为.transformResponse函数的'data'参数将包含您的文本有效负载.

在这种情况下,transformResponse方法返回一个包含字符串的对象而不仅仅是字符串本身,否则它将继续尝试将字符串转换为数组.

    var Stub = $resource('/files/:filename', {}, {'getText': {
        transformResponse: function(data, headersGetter, status) {
            return {content: data};
        }
    }});
Run Code Online (Sandbox Code Playgroud)

要使用资源调用您的自定义getText()操作而不是普通的旧get():

    Stub.getText({'filename': 'someFile.txt'}, function(response) {
        console.info("Content of someFile.txt = " . response.content);
    });
Run Code Online (Sandbox Code Playgroud)

这是一个老帖子,但我认为它应该得到一个新的答案.