【发布时间】:2010-10-24 06:44:21
【问题描述】:
如何在 JavaScript 中从请求中获取“GET”变量?
是 jQuery 还是 YUI!有这个功能吗?
【问题讨论】:
标签: javascript
如何在 JavaScript 中从请求中获取“GET”变量?
是 jQuery 还是 YUI!有这个功能吗?
【问题讨论】:
标签: javascript
可以通过解析当前页面的URL来获取GET参数。使用location.href可以找到该URL。
【讨论】:
您可以使用 URL 来获取 GET 变量。特别是,window.location.search 给出了(包括)“?”之后的所有内容。您可以阅读有关 window.location here 的更多信息。
【讨论】:
2021 年 6 月更新:
当今的浏览器具有用于处理 URL (URL) 和查询字符串 (URLSearchParams) 的内置 API,这些应该是首选,除非您需要支持一些旧浏览器或 Opera mini (Browser support)。
原文:
所有数据都可以在
window.location.search
你必须解析字符串,例如。
function get(name){
if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search))
return decodeURIComponent(name[1]);
}
只需调用带有 GET 变量名作为参数的函数,例如。
get('foo');
如果变量没有值或不存在,此函数将返回变量值或未定义
【讨论】:
如果你已经使用 jquery,有一个 jquery 插件可以处理这个问题:
【讨论】:
你可以使用jquery.url 我是这样做的:
var xyz = jQuery.url.param("param_in_url");
【讨论】:
var xyz = jQuery.url().param("param_in_url"); 是正确的语法,jQuery.url() 给出了当前页面的 URL。请更正。
如果你想要一个包含所有请求的对象,只需投入我的两分钱
function getRequests() {
var s1 = location.search.substring(1, location.search.length).split('&'),
r = {}, s2, i;
for (i = 0; i < s1.length; i += 1) {
s2 = s1[i].split('=');
r[decodeURIComponent(s2[0]).toLowerCase()] = decodeURIComponent(s2[1]);
}
return r;
};
var QueryString = getRequests();
//if url === "index.html?test1=t1&test2=t2&test3=t3"
console.log(QueryString["test1"]); //logs t1
console.log(QueryString["test2"]); //logs t2
console.log(QueryString["test3"]); //logs t3
注意,每个 get 参数的键都设置为小写。所以,我做了一个辅助函数。所以现在它不区分大小写了。
function Request(name){
return QueryString[name.toLowerCase()];
}
【讨论】:
map-reduce 解决方案:
var urlParams = location.search.split(/[?&]/).slice(1).map(function(paramPair) {
return paramPair.split(/=(.+)?/).slice(0, 2);
}).reduce(function (obj, pairArray) {
obj[pairArray[0]] = pairArray[1];
return obj;
}, {});
用法:
For url: http://example.com?one=1&two=2
console.log(urlParams.one) // 1
console.log(urlParams.two) // 2
【讨论】:
map/reduce只是一个集合处理机制:可以用于任何大小的数据。由于愿意并行化,它以大数据而闻名
今天我需要将页面的请求参数放入一个关联数组中,所以我将以下内容放在一起,以及来自myfriends 的一点help。它还将没有= 的参数处理为true。
举个例子:
// URL: http://www.example.com/test.php?abc=123&def&xyz=&something%20else
var _GET = (function() {
var _get = {};
var re = /[?&]([^=&]+)(=?)([^&]*)/g;
while (m = re.exec(location.search))
_get[decodeURIComponent(m[1])] = (m[2] == '=' ? decodeURIComponent(m[3]) : true);
return _get;
})();
console.log(_GET);
> Object {abc: "123", def: true, xyz: "", something else: true}
console.log(_GET['something else']);
> true
console.log(_GET.abc);
> 123
【讨论】:
这里的函数按名称返回参数。通过微小的更改,您将能够返回基本 url、参数或锚点。
function getUrlParameter(name) {
var urlOld = window.location.href.split('?');
urlOld[1] = urlOld[1] || '';
var urlBase = urlOld[0];
var urlQuery = urlOld[1].split('#');
urlQuery[1] = urlQuery[1] || '';
var parametersString = urlQuery[0].split('&');
if (parametersString.length === 1 && parametersString[0] === '') {
parametersString = [];
}
// console.log(parametersString);
var anchor = urlQuery[1] || '';
var urlParameters = {};
jQuery.each(parametersString, function (idx, parameterString) {
paramName = parameterString.split('=')[0];
paramValue = parameterString.split('=')[1];
urlParameters[paramName] = paramValue;
});
return urlParameters[name];
}
【讨论】:
试试下面的代码,它会帮助你从 url 获取 GET 参数。 for more details.
var url_string = window.location.href; // www.test.com?filename=test
var url = new URL(url_string);
var paramValue = url.searchParams.get("filename");
alert(paramValue)
【讨论】:
为我工作
网址:http://localhost:8080/#/?access_token=111
function get(name){
const parts = window.location.href.split('?');
if (parts.length > 1) {
name = encodeURIComponent(name);
const params = parts[1].split('&');
const found = params.filter(el => (el.split('=')[0] === name) && el);
if (found.length) return decodeURIComponent(found[0].split('=')[1]);
}
}
【讨论】:
与其他答案不同,UrlSearchParams 对象可以避免使用正则表达式或其他字符串操作,并且适用于大多数现代浏览器:
var queryString = location.search
let params = new URLSearchParams(queryString)
// example of retrieving 'id' parameter
let id = parseInt(params.get("id"))
console.log(id)
【讨论】: