Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript向Url添加参数_Javascript_Replace_Parameters_Url Rewriting_Url Parameters - Fatal编程技术网

使用javascript向Url添加参数

使用javascript向Url添加参数,javascript,replace,parameters,url-rewriting,url-parameters,Javascript,Replace,Parameters,Url Rewriting,Url Parameters,我正在尝试将参数“referer=“添加到与新会话的流量referer相对应的url中 我使用了一些来自。。。但是,它不断地在循环中重新加载页面。。。那么url就像: https://example.com?refere=facebookreferer=facebookreferer=facebook 注: 我一直在使用此解决方案1: function addOrUpdateUrlParam(name, value) { var ref = document.referrer; var

我正在尝试将参数“referer=“添加到与新会话的流量referer相对应的url中

我使用了一些来自。。。但是,它不断地在循环中重新加载页面。。。那么url就像:

https://example.com?refere=facebookreferer=facebookreferer=facebook

注:

我一直在使用此解决方案1:

function addOrUpdateUrlParam(name, value)

{
  var ref = document.referrer;
  var refsplit = ref.split(".")[1];
  var href = window.location.href;
  var regex = new RegExp("[&\\?]" + name + "=");
  if(regex.test(href))
  {
    regex = new RegExp("([&\\?])" + name + "=\\d+");
  {

  else
  {
    if(href.indexOf("?") > -1)
      window.location.href = href + "&" + name + "=" + value;
    else
      window.location.href = href + "?" + name + "=" + value;
  }
  if (refsplit != "example") {
  return addOrUpdateUrlParam("referer", refsplit);
}
}
这个解决方案2:

function () {
  var ref = document.referrer;
  var refsplit = ref.split(".")[1];
  if (refsplit != "example") {
return location.search += "referer=" + refsplit;
}
}
编辑1: 感谢您,我将代码改进为:

function  () {
  var ref = document.referrer;
  var refsplit = ref.split(".")[1];
  var currentUrl = location.href;
  var url1 = currentUrl += "?referer="+refsplit;
  var url2 = currentUrl += "&referer="+refsplit;

   if(currentUrl.indexOf("?") < 0) {
    return window.location = url1;
   } else {
    return window.location = url2;
   }
}
编辑2: 因此,经过多次尝试,我通过使用url(location.search)的参数而不是完整的url(location.href)实现了这一点:


然而,它不是通过浏览创建一个持久查询字符串。。。如何使新参数持久化?

获取当前窗口的url,在域名之后,只需使用&referer=value标记您的url即可

var currentUrl = location.href;
var paramsInUrl = currentUrl.split('&');
var flag = true;
for(var i in paramsInUrl)
{
    if(!paramsInUrl[i].includes('referer=')
    {
        continue;
    }
    else
    {
        flag = false;
        break;
    }
}
if(flag)
{
    currentUrl += '&referer='+value;
    window.location = currentUrl; 
}
为了说明它的价值(因为更一般的问题是如何实现这一点,这将引导我进入本文),我创建了一个178字节的helper函数,该函数接收要添加到GET请求url中的查询参数的对象(与如何向请求添加头的格式类似)并在此处为其制作了一个npm包:


希望这对一些人有帮助。

它几乎可以工作。。。事实上,有时当前url还没有任何参数。。。所以我用。。。但它同时添加了两个条件,比如:将url存储在变量中,并使用&。现在您将拥有数组中的所有参数和值。使用toString()方法将数组转换为字符串。现在检查(!if(parameters.includes(“referer))。如果此条件返回true,则在If语句下方插入我的答案谢谢…看起来很好,我很确定它应该可以工作..但网站一直循环参数,我不知道原因:可能是服务器端出现了问题。此代码将向服务器发送GET请求,如果您没有在服务器端处理GET请求,则可能会出现问题。请尝试向服务器发送来自邮递员的请求,并检查其是否正确。如果此操作正常,请注释您获得的状态代码。如果此操作有效,请将我的回答标记为已验证。Ty
function addRefererParam () {
var ref = document.referrer;  //Get Referrer
var refDomain = ref.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)[0]; //Extract Referrer Domain name for better readability
var params = location.search; //Get Url parameters

  if (refDomain.match(/mydomain|null|undefined/i)) { //check if domain not null or own domain. 
    return params ;
} else {
    return params += "utm_source=" + refDomain; //create new query string with referrer domain
}
}
var currentUrl = location.href;
var paramsInUrl = currentUrl.split('&');
var flag = true;
for(var i in paramsInUrl)
{
    if(!paramsInUrl[i].includes('referer=')
    {
        continue;
    }
    else
    {
        flag = false;
        break;
    }
}
if(flag)
{
    currentUrl += '&referer='+value;
    window.location = currentUrl; 
}