【发布时间】:2014-10-17 21:50:09
【问题描述】:
我在尝试提交我在 AngularJS 控制器代码中动态构建的 URL,然后使用 encodeURIComponent() 进行编码时遇到了一点问题
这是一个动态构建的 URL 示例(在编码之前,不会通过 Fiddler 提交):
http://localhost:49479/api/aggr?sid=f68f52614800393fdbef22cc55a7d3d0fea10e655fff6e7573ca&kri=[CDSStress A]:[USD 10Y X -1.25],[CDSStress A]:[USD 1Y X 1.25]&aggrFunc=SUM([CDSStress A]:[USD 10Y X -1.25]),SUM([CDSStress A]:[USD 1Y X 1.25])&dim=Counterparty
相同的 URL,使用 %20 手动编码(通过 Fiddler 提交到 API 层):
http://localhost:49479/api/aggr?sid=f68f52614800393fdbef22cc55a7d3d0fea10e655fff6e7573ca&kri=[CDSStress%20A]:[USD%201Y%20X%201.25],[CDSStress%20A]:[USD%201Y%20X%20-1.25]&aggrFunc=SUM([CDSStress%20A]:[USD%201Y%20X%201.25]),SUM([CDSStress%20A]:[USD%201Y%20X%20-1.25])&dim=Counterparty
但是,通过 encodeURIComponent() 进行编码不会通过 Fiddler 提交给我的 API 层。这是编码的网址:
http%3A%2F%2Flocalhost%3A49479%2Fapi%2Faggr%3Fsid%3Df68f52614800393fdbef22cc55a7d3d0fea10e655fff6e7573ca%26kri%3D%5BCDSStress%20A%5D%3A%5BUSD%201Y%20X%201.25%5D%2C%5BCDSStress%20A%5D%3A%5BUSD%201Y%20X%20-1.25%5D%26aggrFunc%3DSUM(%5BCDSStress%20A%5D%3A%5BUSD%201Y%20X%201.25%5D)%2CSUM(%5BCDSStress%20A%5D%3A%5BUSD%201Y%20X%20-1.25%5D)%26dim%3DCounterparty
还有我构建 URL 并提交到数据上下文层的角度控制器代码:
function sendAggrRequest(kriList, aggrFunc, dim) {
var results = [];
var rageVars = $rootScope.rageSessionVars;
var url = "http://" + rageVars.domainName + ":" + rageVars.port + "/api/aggr?sid=" + rageVars.sessionID +
"&kri=" + kriList + "&aggrFunc=" + aggrFunc + "&dim=" + dim;
url="http://localhost:49479/api/aggr?sid=a74b9822cf5e0e75b0d8ff0c25981a573606893150348d6cad80&kri=[CDSStress%20A]:[USD%201Y%20X%201.25],[CDSStress%20A]:[USD%201Y%20X%20-1.25]&aggrFunc=SUM([CDSStress%20A]:[USD%201Y%20X%201.25]),SUM([CDSStress%20A]:[USD%201Y%20X%20-1.25])&dim=Counterparty"
datacontext.sendAggrRequestToServer(encodeURIComponent(url)).then(function (data) {
if (data.status == 'FAIL') {
if (data.messages.length > 0) {
logErr("Error retrieving KRI list: " + data.messages[0]);
return;
}
}
else {
results = data.data;
}
});
}
如果您能就编码 URL 的最佳方式提供一些建议,那就太好了。
谢谢。
鲍勃
【问题讨论】:
-
你试过 encodeURI(uri) 吗?或者你可以用 %20 正则表达式替换空间
-
我确实尝试了 encodeURI() 但它似乎正在截断它。原来我错了。 encodeURI() 似乎确实有效。也许将其作为您的答案,因为您已帮助我进一步研究了这一点。谢谢。
标签: javascript angularjs