Javascript 如何从get参数中获取值?
我有一个URL,其中包含一些GET参数,如下所示:Javascript 如何从get参数中获取值?,javascript,url,url-parameters,Javascript,Url,Url Parameters,我有一个URL,其中包含一些GET参数,如下所示: www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 我需要得到c的全部值。我试图读取URL,但只得到了m2。如何使用JavaScript实现这一点?JavaScript本身没有处理查询字符串参数的内置功能 在(现代)浏览器中运行的代码您可以使用(这是浏览器提供给JS的API的一部分): var url\u字符串=”http://www.example.com/t.html?a=1&b=3&c
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
我需要得到c
的全部值。我试图读取URL,但只得到了m2
。如何使用JavaScript实现这一点?JavaScript本身没有处理查询字符串参数的内置功能
在(现代)浏览器中运行的代码您可以使用(这是浏览器提供给JS的API的一部分):
var url\u字符串=”http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5”//window.location.href
var url=新的url(url\u字符串);
var c=url.searchParams.get(“c”);
控制台日志(c)代码>您可以在位置中获取查询字符串。搜索
,然后您可以分割问号后的所有内容:
var params = {};
if (location.search) {
var parts = location.search.substring(1).split('&');
for (var i = 0; i < parts.length; i++) {
var nv = parts[i].split('=');
if (!nv[0]) continue;
params[nv[0]] = nv[1] || true;
}
}
// Now you can get the parameters you want like so:
var abc = params.abc;
var params={};
if(location.search){
var parts=location.search.substring(1).split('&');
对于(变量i=0;i
我见过的大多数实现都忽略了URL对名称和值的解码
下面是一个通用实用程序函数,它还可以执行正确的URL解码:
function getQueryParams(qs) {
qs = qs.split('+').join(' ');
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
//var query = getQueryParams(document.location.search);
//alert(query.foo);
我使用图书馆。它允许您完全按照自己的要求执行:
var uri = 'www.test.com/t.html&a=1&b=3&c=m2-m3-m4-m5';
var c = uri.queryKey['c'];
// c = 'm2-m3-m4-m5'
函数getURLParameters(paramName)
{
var sURL=window.document.URL.toString();
if(sURL.indexOf(“?”)大于0)
{
var arrParams=剩余分割(“?”);
var arrrurlparams=arrParams[1]。拆分(“&”);
var arrParamNames=新数组(arrrurlparms.length);
var arrParamValues=新数组(arrrurlparms.length);
var i=0;
对于(i=0;i我早就发现这一点,非常简单:
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function(m,key,value) {
vars[key] = value;
});
return vars;
}
那么就这样称呼它:
var fType = getUrlVars()["type"];
document.write( tokens['id'] );
这是只检查一个参数的简单方法:
示例URL:
http://myserver/action?myParam=2
Javascript示例:
var myParam=location.search.split('myParam=')[1]
如果URL中存在“myParam”…变量myParam将包含“2”,否则它将未定义
在这种情况下,您可能需要一个默认值:
var myParam=location.search.split('myParam=')[1]?location.search.split('myParam=')[1]:'myDefaultValue';
更新:这样效果更好:
var url=”http://www.example.com/index.php?myParam=384&login=admin“;//或当前url的window.location.href
var captured=/myParam=([^&]+)/.exec(url)[1];//值位于[1]('384'在本例中)
var result=captured?captured:'myDefaultValue';
即使URL充满了参数,它也能正常工作。这里有一个递归解决方案,它没有正则表达式,并且变异最小(只有params对象发生了变异,我相信这在JS中是不可避免的)
这太棒了,因为它:
var get_params = function(search_string) {
var parse = function(params, pairs) {
var pair = pairs[0];
var parts = pair.split('=');
var key = decodeURIComponent(parts[0]);
var value = decodeURIComponent(parts.slice(1).join('='));
// Handle multiple parameters of the same name
if (typeof params[key] === "undefined") {
params[key] = value;
} else {
params[key] = [].concat(params[key], value);
}
return pairs.length == 1 ? params : parse(params, pairs.slice(1))
}
// Get rid of leading ?
return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}
var params = get_params(location.search);
// Finally, to get the param you want
params['c'];
<script type="text/javascript">
var first = getUrlVars()["year"];
var second = getUrlVars()["Month"];
alert(first);
alert(second);
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
</script>
paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
- 是递归的
- 处理多个同名参数
- 可以很好地处理格式错误的参数字符串(缺少值等)
- 如果值中有“=”则不中断
- 执行URL解码
- 最后,这真是太棒了,因为它…啊
代码:
var get_params = function(search_string) {
var parse = function(params, pairs) {
var pair = pairs[0];
var parts = pair.split('=');
var key = decodeURIComponent(parts[0]);
var value = decodeURIComponent(parts.slice(1).join('='));
// Handle multiple parameters of the same name
if (typeof params[key] === "undefined") {
params[key] = value;
} else {
params[key] = [].concat(params[key], value);
}
return pairs.length == 1 ? params : parse(params, pairs.slice(1))
}
// Get rid of leading ?
return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}
var params = get_params(location.search);
// Finally, to get the param you want
params['c'];
<script type="text/javascript">
var first = getUrlVars()["year"];
var second = getUrlVars()["Month"];
alert(first);
alert(second);
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
</script>
paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
还有一个建议
已经有一些很好的答案,但我发现它们不必要的复杂和难以理解。这是一个简短、简单的数组,返回一个简单的关联数组,其中键名对应于URL中的标记名
我为那些想学习的人添加了一个带有评论的版本
注意,这依赖于jQuery($.each)的循环,我建议使用jQuery而不是forEach。我发现使用jQuery来确保跨浏览器兼容性比插入单个修复程序来支持旧浏览器不支持的新功能更简单
编辑:在我写了这篇文章之后,我注意到埃里克·埃利奥特的答案几乎是一样的,尽管它使用了forEach,而我通常反对(出于上述原因)
评论版本:
function getTokens(){
var tokens = []; // new array to hold result
var query = location.search; // everything from the '?' onward
query = query.slice(1); // remove the first character, which will be the '?'
query = query.split('&'); // split via each '&', leaving us an array of something=something strings
// iterate through each something=something string
$.each(query, function(i,value){
// split the something=something string via '=', creating an array containing the token name and data
var token = value.split('=');
// assign the first array element (the token name) to the 'key' variable
var key = decodeURIComponent(token[0]);
// assign the second array element (the token data) to the 'data' variable
var data = decodeURIComponent(token[1]);
tokens[key] = data; // add an associative key/data pair to our result array, with key names being the URI token names
});
return tokens; // return the array
}
对于以下示例,我们将假设此地址:
http://www.example.com/page.htm?id=4&name=murray
您可以将URL标记分配给自己的变量:
var tokens = getTokens();
然后按名称引用每个URL标记,如下所示:
var fType = getUrlVars()["type"];
document.write( tokens['id'] );
这将打印“4”
您也可以直接从函数中引用令牌名称:
document.write( getTokens()['name'] );
…将打印“murray”。这个问题有太多答案,所以我要添加另一个答案
/**
* parses and returns URI query parameters
*
* @param {string} param parm
* @param {bool?} asArray if true, returns an array instead of a scalar
* @returns {Object|Array}
*/
function getURIParameter(param, asArray) {
return document.location.search.substring(1).split('&').reduce(function(p,c) {
var parts = c.split('=', 2).map(function(param) { return decodeURIComponent(param); });
if(parts.length == 0 || parts[0] != param) return (p instanceof Array) && !asArray ? null : p;
return asArray ? p.concat(parts.concat(true)[1]) : parts.concat(true)[1];
}, []);
}
用法:
getURIParameter("id") // returns the last id or null if not present
getURIParameter("id", true) // returns an array of all ids
这可以处理空参数(那些不带“=value”的键),标量和基于数组的值检索API的公开,以及正确的URI组件解码。下面是我要做的:
var uriParams = getSearchParameters();
alert(uriParams.c);
// background functions:
// Get object/associative array of URL parameters
function getSearchParameters () {
var prmstr = window.location.search.substr(1);
return prmstr !== null && prmstr !== "" ? transformToAssocArray(prmstr) : {};
}
// convert parameters from url-style string to associative array
function transformToAssocArray (prmstr) {
var params = {},
prmarr = prmstr.split("&");
for (var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
var uriParams=getSearchParameters();
警报(uriParams.c);
//后台功能:
//获取URL参数的对象/关联数组
函数getSearchParameters(){
var prmstr=window.location.search.substr(1);
返回prmstr!==null&&prmstr!==“”?transformToAssocArray(prmstr):{};
}
//将参数从url样式字符串转换为关联数组
功能转换到ASSOCARRAY(prmstr){
var params={},
prmarr=prmstr.分割(“&”);
对于(变量i=0;i
//读取页面的GET URL变量,并将其作为关联数组返回。
函数getUrlVars()
{
var vars=[],散列;
var hashes=window.location.href.slice(window.location.href.indexOf('?')+1).split('&');
for(var i=0;i
从这里开始:我写了一个更简单、更优雅的解决方案
var arr = document.URL.match(/room=([0-9]+)/)
var room = arr[1];
或者,如果您不想重新发明URI解析轮,请使用
要获取名为foo的参数的值,请执行以下操作:
new URI((''+document.location)).search(true).foo
它的作用是<
const getUrlParams = url => `${url}?`.split('?')[1]
.split('&').reduce((params, pair) =>
((key, val) => key ? {...params, [key]: val} : params)
(...`${pair}=`.split('=').map(decodeURIComponent)), {});
console.log(getUrlParams('https://google.com/foo?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
console.log(getUrlParams('/foo?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
console.log(getUrlParams('?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
console.log(getUrlParams('https://google.com/')); // Will log {}
console.log(getUrlParams('a=1&b=2&c')); // Will log {}
const getUrlParams = (search: string) => `${search}?`
.split('?')[1]
.split('&')
.reduce(
(params: object, pair: string) => {
const [key, value] = `${pair}=`
.split('=')
.map(decodeURIComponent)
return key.length > 0 ? { ...params, [key]: value } : params
},
{}
)
interface IParams { [key: string]: string }
const paramReducer = (params: IParams, pair: string): IParams => {
const [key, value] = `${pair}=`.split('=').map(decodeURIComponent)
return key.length > 0 ? { ...params, [key]: value } : params
}
const getUrlParams = (search: string): IParams =>
`${search}?`.split('?')[1].split('&').reduce<IParams>(paramReducer, {})
http://TestServer/Pages/NewsArchive.aspx?year=2013&Month=July
<script type="text/javascript">
var first = getUrlVars()["year"];
var second = getUrlVars()["Month"];
alert(first);
alert(second);
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
</script>
function getParams(url){
var regex = /[?&]([^=#]+)=([^&#]*)/g,
params = {},
match;
while(match = regex.exec(url)) {
params[match[1]] = match[2];
}
return params;
}
let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
let searchParams = new URLSearchParams(url.search);
console.log(searchParams.get('c')); // outputs "m2-m3-m4-m5"
function getVal(str) {
var v = window.location.search.match(new RegExp('(?:[\?\&]'+str+'=)([^&]+)'));
return v ? v[1] : null;
}
function getUrlQueryParams(url) {
var queryString = url.split("?")[1];
var keyValuePairs = queryString.split("&");
var keyValue = [];
var queryParams = {};
keyValuePairs.forEach(function(pair) {
keyValue = pair.split("=");
queryParams[keyValue[0]] = decodeURIComponent(keyValue[1]).replace(/\+/g, " ");
});
return queryParams;
}
// Query parameters with strings only, no special characters.
var currentParams = getUrlQueryParams("example.com/foo?number=zero");
alert(currentParams["number"]); // Gives "zero".
// For the URL you stated above...
var someParams = getUrlQueryParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ");
alert(someParams["c"]); // Gives "m2-m3-m4-m5".
// For a query params with URI encoding...
var someParams = getUrlQueryParams("www.example.com/t.html?phrase=a%20long%20shot&location=Silicon+Valley%2C+USA");
alert(someParams["phrase"]); // Gives "a long shot".
alert(someParams["location"]); // Gives "Silicon Valley, USA".
// http:localhost:8080/path?param_1=a¶m_2=b
var getParamsMap = function () {
var params = window.location.search.split("&");
var paramsMap = {};
params.forEach(function (p) {
var v = p.split("=");
paramsMap[v[0]]=decodeURIComponent(v[1]);
});
return paramsMap;
};
// -----------------------
console.log(getParamsMap()["param_1"]); // should log "a"
function getParam(param){
return new URLSearchParams(window.location.search).get(param);
}
new URL(location.href).searchParams.get("my_key");
paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');