【问题标题】:How to encode a URL in an AngularJS controller如何在 AngularJS 控制器中编码 URL
【发布时间】: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


【解决方案1】:

试试

encodeURI(uri)? 

或者您可以只使用regex replace space%20

【讨论】:

  • encodeURI() 似乎对 URL 做了一些奇怪的事情。用 %20 替换正则表达式至少对我有用。
【解决方案2】:

我在 AngularJS 中使用 encodeURIComponent 没有任何问题:

var params = $location.search();
var someThingEncoded = encodeURIComponent(params.someThing);

如果事情很时髦,您可能还想尝试 $log.log。例如,encodeURI 可能不适用于 url 段,但 encodeURIComponent 仍然可以,因此您可以尝试同时记录到控制台并进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2014-09-09
    • 2015-06-27
    • 2014-03-16
    • 1970-01-01
    • 2017-05-10
    • 2016-10-14
    相关资源
    最近更新 更多