$http get returns 不同于 $resource get
$http get returns different than $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 很难返回原始数据?有什么想法吗?
提前致谢!
$resource 假设响应是一个 JSON 对象,并在该假设下进行额外的处理。这里有几个选项可以解决您的问题:
使用 transformResponse 避免解析为 JSON 对象(参见有关 transformResponse 的 $resource 文档:https://docs.angularjs.org/api/ngResource/service/$resource ),不确定是否有效。
使用 $http 代替 $resource。
使后端 return 成为 JSON 对象而不是纯文本。
如果你使用 $resource, transformResponse 它必须是这样的:
{ ...
method: "GET",
transformResponse: function(data, headersGetter, status) {
return {content: data};
}
在 user.service.js
的 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 很难返回原始数据?有什么想法吗?
提前致谢!
$resource 假设响应是一个 JSON 对象,并在该假设下进行额外的处理。这里有几个选项可以解决您的问题:
使用 transformResponse 避免解析为 JSON 对象(参见有关 transformResponse 的 $resource 文档:https://docs.angularjs.org/api/ngResource/service/$resource ),不确定是否有效。
使用 $http 代替 $resource。
使后端 return 成为 JSON 对象而不是纯文本。
如果你使用 $resource, transformResponse 它必须是这样的:
{ ...
method: "GET",
transformResponse: function(data, headersGetter, status) {
return {content: data};
}
在 user.service.js
的 GET 中