$ http获得的返回值不同于$ resource get

我正在尝试使用User $resource下载用户报告。 但是,返回的结果是这样的对象:(奇怪)

 {0: "n", 1: "a", 2: "m", 3: "e", 4: ",", 5: "e", 6: "m", 7: "a", 8: "i", 9: "l", 10: ",", 11: "p", 12: "a", 13: "r", 14: "t", 15: "n", 16: "e", 17: "r", 18: ",", 19: "r", 20: "o", 21: "l", 22: "e", 23: ",", 24: "p", 25: "h", 26: "o", 27: "n", 28: "e", 29: ",", 30: "s", 31: "t", 32: "a", 33: "t", 34: "u", 35: "s", 36: "↵", 37: "M", 38: "i", 39: "c", 40: "h", 41: "a", 42: "e", 43: "l", 44: " ", 45: "J", 46: "o", 47: "r", 48: "d", 49: "a", 50: "n", 51: ",", 52: "m", 53: "j", 54: "@", 55: "m", 56: "j", 57: ".", 58: "c", 59: "o", 60: "m", 61: ",", 62: ",", 63: "a", 64: "d", 65: "m", 66: "i", 67: "n", 68: ",", 69: "8", 70: "0", 71: "1", 72: "5", 73: "6", 74: "4", 75: "1", 76: "3", 77: "6", 78: "1", 79: ",", 80: "↵", $promise: Promise, $resolved: true} 

当我使用$ http.get时,一切都如预期的那样:

 name,email,partner,role,phone,status Michael Jordan,mj@mj.com,,admin,8015641361, 

我不知道我在做什么错。 这是我的文件:

search.controller.js(两种方法产生不同的结果)

 $scope.downloadReport = function() { $http.get('/api/users/download',{params:$state.params}).success(function(res) { console.log(res) var anchor = angular.element('<a/>'); anchor.attr({ href: 'data:attachment/csv;charset=utf-8,' + encodeURI(res), target: '_blank', download: 'filename.csv' })[0].click(); }); User.download($state.params,function(res){ console.log(res) var anchor = angular.element('<a/>'); anchor.attr({ href: 'data:attachment/csv;charset=utf-8,' + encodeURI(res), target: '_blank', download: 'Users.csv' })[0].click(); },function(err){ console.log(err) }); }; 

user.service.js(尝试使用和不使用isArray)

 angular.module('Raizzle.Admin') .factory('User', function ($resource) { return $resource('/api/users/:id/:controller', { id: '@_id'}, { download: { method: 'GET', params: { id:'download' } }, changePassword: { method: 'PUT', params: { controller:'password' } }, get: { method: 'GET', params: { id:'me' } } }); }); 

我猜测$资源很难返回原始数据? 有任何想法吗?

提前致谢!

$ resource假定响应是一个JSON对象,并在这个假设下做了额外的处理。 你有几个select来解决你的问题:

  1. 使用transformResponse避免parsing到JSON对象(请参阅$ resource documentation about transformResponse: https : //docs.angularjs.org/api/ngResource/service/ $ resource),不确定这将甚至工作。

  2. 使用$ http而不是$ resource。

  3. 使后端返回一个JSON对象而不是明文。

如果您使用$资源,transformResponse它必须是这样的:

  { ... method: "GET", transformResponse: function(data, headersGetter, status) { return {content: data}; } 

在user.service.js的GET中