14

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

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

4

2 回答 2

21

$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)
  }
);
于 2013-07-26T18:35:39.773 回答
16

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

在这种情况下,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);
    });

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

于 2015-05-08T08:31:02.850 回答