在 JavaScript 中使用 URL 的 GET 参数

IT技术 javascript url get
2021-01-22 23:48:58

如果我在一个页面上,例如

http://somesite.com/somepage.php?param1=asdf

在该页面的 JavaScript 中,我想将一个变量设置为 URL 的 GET 部分中的参数值。

所以在 JavaScript 中:

<script>
   param1var = ...   // ... would be replaced with the code to get asdf from URI
</script>

会是什么?

6个回答

这是一些示例代码

<script>
var param1var = getQueryVariable("param1");

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
  alert('Query Variable ' + variable + ' not found');
}
</script>
你或许应该叫decodeURIComponentpair[1]返回之前,最好在pair[0]比较它与变量之前。
2021-04-04 23:48:58

您可以获得位置对象的“搜索”部分 - 然后将其解析出来。

var matches = /param1=([^&#=]*)/.exec(window.location.search);
var param1 = matches[1];

我对 gnarf 的解决方案进行了这种变体,因此调用和结果类似于 PHP:

function S_GET(id){
    var a = new RegExp(id+"=([^&#=]*)");
    return decodeURIComponent(a.exec(window.location.search)[1]);
}

但是由于在函数中调用会减慢进程,因此最好将其用作全局:

window['var_name '] = decodeURIComponent( /var_in_get=([^&#=]*)/.exec(window.location.search)[1] );

更新

由于我仍在学习 JS,我在更多 JS 行为中创建了一个更好的答案:

Url = {
    get get(){
        var vars= {};
        if(window.location.search.length!==0)
            window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value){
                key=decodeURIComponent(key);
                if(typeof vars[key]==="undefined") {vars[key]= decodeURIComponent(value);}
                else {vars[key]= [].concat(vars[key], decodeURIComponent(value));}
            });
        return vars;
    }
};

这允许仅使用Url.get.

示例 url?param1=param1Value&param2=param2Value 可以这样调用:

Url.get.param1 //"param1Value"
Url.get.param2 //"param2Value"

这是一个snipet:

+1 与我的版本(不使用临时变量并编码参数值)相似,以及在幽默不恰当的上下文中有趣的性能提示。
2021-03-23 23:48:58

从我的编程档案:

function querystring(key) {
   var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
   var r=[], m;
   while ((m=re.exec(document.location.search)) != null) r[r.length]=m[1];
   return r;
}

如果该值不存在,则返回一个空数组。
如果该值存在,则返回一个数组,该数组具有一项,即该值。
如果存在多个具有该名称的值,则返回包含每个值的数组。

例子:

var param1var = querystring("param1")[0];

document.write(querystring("name"));

if (querystring('id')=='42') alert('We apoligize for the inconvenience.');

if (querystring('button').length>0) alert(querystring('info'));

以下是如何在 Coffee Script 中执行此操作(如果有人感兴趣的话)。

decodeURIComponent( v.split( "=" )[1] ) if decodeURIComponent( v.split( "=" )[0] ) == name for v in window.location.search.substring( 1 ).split( "&" )