如何访问ngResource响应的原始JSON字符串?

时间:2015-02-26 14:54:57

标签: angularjs angular-resource

我使用ngResource查询JSON服务,默认情况下,Angular会解析响应。不幸的是,我也希望能够访问原始响应字符串。

以下是我想要实现的内容片段:

var app = angular.module('plunker', ['ngResource']);

app.factory('DateResource', function($resource, $http) {
  var raw = null,
    resource = $resource('http://date.jsontest.com/', {}, {
      query: {
        method: 'GET',
        transformResponse: [
          function(data) {
            raw = data;
            return data;
          }
        ].concat($http.defaults.transformResponse).concat([
          function(data) {
            data.$raw = raw;
            return data;
          }
        ])
      }
    });
  return resource;
});

app.controller('MainCtrl', function($scope, DateResource) {
  DateResource.query({}, function(response) {
    console.log('response:', response); // should be parsed JSON object
    console.log('response.$raw:', response.$raw); // should be raw JSON string
  });
});

查看完整示例:http://plnkr.co/edit/RSwrRQFo1dEGDkxzRTcF

这个实现在父作用域中使用两个transformRequest函数和一个raw变量并不是一个好主意,因为调用可能是异步的......

是否有可能确定响应,因此我可以记住每个响应的原始内容,并在第二个transformResponse中稍后附加它?或者您知道另一种解决方案吗?

2 个答案:

答案 0 :(得分:4)

您可以通过覆盖转换默认值并使用angular.fromJson(rawData)

来实现
resource = $resource('http://date.jsontest.com/', {}, {
  query: {
    method: 'GET',
    transformResponse: transformGet
  }
});


function transformGet(json, headerGetter) {
  var fromJson = angular.fromJson(json);
  fromJson.json = json ;
  return fromJson;
}

Plunker:http://plnkr.co/edit/uIIdKAeUwRN4ThUlMsvd

希望有所帮助

答案 1 :(得分:-1)

 var app = angular.module('plunker', ['ngResource']);

app.factory('DateResource', function($resource, $http) {
  var raw = null,
    resource = $resource('http://date.jsontest.com/', {}, {
      query: {
        method: 'GET',

      }
    });
  return resource;
});

app.controller('MainCtrl', function($scope, DateResource) {
  DateResource.query({}, function(response) {
    console.log('response:', response); // should be parsed JSON object
    console.log('response.$raw:', angular.toJson(response)); // should be raw JSON string
  });
});

请参阅以下链接以获得清晰的理解:

https://docs.angularjs.org/api/ngResource/service/ $资源