【问题标题】:Get query string parameters including all characters with javascript使用javascript获取查询字符串参数,包括所有字符
【发布时间】:2016-08-02 10:30:01
【问题描述】:

我需要按名称获取查询字符串参数。

我的参数包括所有类型的字符,包括“=”符号。

这是一个例子:

http://MyProject/ResetPassword?userid=12489e2ss125-f031-4ef7d-95c9-80e894efc6a0&code=Ippr7HP/Fad2q3kKMehQtVYnbFcZp+h4ECS+RCQmN+KrcAM8N4tdeNciNEXlwkhnjF3tZgez1/a1Ca1018uXpodGEnPcyTjsfuSmyuS1hoRXY04wKLgiyW031aLAYmua8yXLDdghgjo+0s7SUD7LWFMapMP8b3eN//ycbe1QNm6RVc7ahMs77ng6i6p6MScBefU/Rnj5ME7ly7tqw==

我试过了:

function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

但它用空格替换了“+”号:

“代码”:“Ippr7HP / Fad2q3kKMehQtVYnbFcZp h4ECS RCQmN KrcAM8N4tdeNciNEXlwkhnjF3tZgez1 / a1Ca1018uXpodGEnPcyTJzsupjsfuSmyuS1hoRXY04wKLgiyW031aLAYmua8yXLDdghgjo 0s7SUD7LWFMapMP8b3eN // ycbe1QNm6RVc7ahMs77ng6i6p6MScBefU / Rnj5ME7ly7tqw == P>

我试过了:

function getParameterByName(key) {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
}
return vars[key];
}

但这不包括“=”符号...

有什么建议吗?

【问题讨论】:

  • 所以……基本上……您的查询字符串格式不正确。如何修复生成它的东西而不是试图绕过错误?
  • @Quentin 这是asp.net身份生成代码以重置密码的方式,我不是自己写的,也不想尝试更改他们的系统..

标签: javascript query-string


【解决方案1】:

你的第二次尝试已经足够接近了,你只需要在.split('=')之后加入返回值部分

function getParameterByName(parameterName) {
    var query = window.location.search.substring(1);
    var queryParameters = {};
    var vars = query.split('&');
    for (var i = 0; i < vars.length; i++) {
        var keyValue = vars[i].split('=');
        var key = keyValue[0];
        var value = keyValue.slice(1).join('=');
        queryParameters[decodeURIComponent(key)] = decodeURIComponent(value);
    }

    return queryParameters[parameterName]
}

【讨论】:

  • 非常感谢,效果很好!!只是一件事,我收到一个错误:'查询未定义'所以我将其替换为:var vars = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&amp;'); 有没有更短的方法?非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 1970-01-01
相关资源
最近更新 更多