我尝试使用以下代码正确编码角度上的查询参数:
getAccount = function (accountEmail, accountCreationDate) {
var data = {
accountEmail: accountEmail,
accountCreationDate: accountCreationDate
};
return $http.get('/administration/account.json', {params: $filter('noBlankValues')(data)}).then(
function (result) {
$log.debug('getAccount result: ' + JSON.stringify(result.data));
return result.data.result;
}
);
};
accountCreationDate是ISO-8601字符串(例如" 2014-03-20T14:56:01.691 + 01:00")。根据{{3}}我将params作为一个对象,但在框架中,我有以下几个"奇怪的"查询输出:
?accountCreationDate=2014-03-20T14:56:01.691%2B01:00&accountEmail=test@test.com
即。日期' +'是编码但不是对象的其余部分。你知道出了什么问题以及如何解决这个问题吗?
PS:我知道我可以手动编写编码的查询字符串,但我正在寻找一种更加用户友好的解决方案。
答案 0 :(得分:1)
好的,这是通过使用以下转换函数解决的:
var transform = function () {
headers: {
'Content-type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
transformRequest: function (obj) {
var str = [];
for (var p in obj) {
if ((typeof obj[p] !== 'undefined') &&
(typeof obj[p] !== 'function')) {
if (obj[p] instanceof Date) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p].toISOString()));
}
else if (obj[p] instanceof Array) {
for (var i in obj[p]) {
if (obj[p][i] instanceof Object) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(JSON.stringify(obj[p][i])));
} else {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p][i]));
}
}
}
else if (obj[p] instanceof Object) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(JSON.stringify(obj[p])));
}
else {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
}
}
}
return str.join('&');
}
}
};