Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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的参数并重定向到新URL_Javascript_Jquery_Append - Fatal编程技术网

Javascript 添加/更改URL的参数并重定向到新URL

Javascript 添加/更改URL的参数并重定向到新URL,javascript,jquery,append,Javascript,Jquery,Append,如果URL中不存在&view all参数,我需要将其与值一起添加到URL的末尾。如果它确实存在,那么我需要能够在不创建新URL的情况下更改该值,因为它之前可能有,也可能没有其他参数 我找到了此函数,但无法使其工作: 以下是我使用上述函数得到的代码(我无法使用该函数): 我已经知道如何附加参数和值: 废话废话 更多信息: 如果URL是http://www.domain.com/index.php?action=my_action那么默认的“&view all”值将是“Yes”,因此他们单击按钮时指

如果URL中不存在
&view all
参数,我需要将其与值一起添加到URL的末尾。如果它确实存在,那么我需要能够在不创建新URL的情况下更改该值,因为它之前可能有,也可能没有其他参数

我找到了此函数,但无法使其工作:

以下是我使用上述函数得到的代码(我无法使用该函数):

我已经知道如何附加参数和值:

废话废话

更多信息:

如果URL是
http://www.domain.com/index.php?action=my_action
那么默认的“&view all”值将是“Yes”,因此他们单击按钮时指向的URL是
http://www.domain.com/index.php?action=my_action&view-全部=是


如果URL是
http://www.domain.com/index.php?action=my_action&view-all=Yes
然后当他们单击按钮时,它将变为
http://www.domain.com/index.php?action=my_action&view-全部=否​​​


编辑:请给我举个例子。我对JS知之甚少,我就是想不出用PHP实现它的方法。

用PHP实现:你有几个参数可以查看你的页面,比如说
action
view all
。您将(可能)使用
$action=$\u GET['action']
或任何设置默认值的方法访问这些文件

然后,如果您想切换一个变量,比如
$viewAll=$viewAll=='Yes',,您就可以根据它来决定了否:'是'

最后,您只需使用这些值再次构建url,如下所示

$clickUrl = $_SERVER['PHP_SELF'] . '?action=' . $action . '&view-all=' . $viewAll;
就这样

因此,您取决于页面状态,而不是用户url(因为以后可能会决定$viewAll作为默认值是Yes或其他任何值)。

函数setGetParameter(paramName,paramValue)
{
var url=window.location.href;
var hash=location.hash;
url=url.replace(散列“,”);
if(url.indexOf(paramName+“=”)>=0)
{
var prefix=url.substring(0,url.indexOf(paramName+“=”);
var后缀=url.substring(url.indexOf(paramName+“=”);
后缀=后缀.substring(后缀.indexOf(“=”)+1);
后缀=(后缀.indexOf(“&”)>=0)?后缀.substring(后缀.indexOf(“&”):“”;
url=前缀+参数名+“=”+参数值+后缀;
}
其他的
{
如果(url.indexOf(“?”)小于0)
url+=“?”+paramName+“=”+paramValue;
其他的
url+=“&”+paramName+“=”+paramValue;
}
window.location.href=url+hash;
}

在onclick事件中调用上面的函数。

一些简单的想法可以帮助您:

在PHP中,您可以这样做:

if (!array_key_exists(explode('=', explode('&', $_GET))) {
  /* add the view-all bit here */
}
在javascript中:

if(!location.search.match(/view\-all=/)) {
  location.href = location.href + '&view-all=Yes';
}

我认为这样做会奏效,升级@Marc代码:

//view-all parameter does NOT exist  
$params = $_GET;  
if(!isset($_GET['view-all'])){  
  //Adding view-all parameter  
  $params['view-all'] = 'Yes';  
}  
else{  
  //view-all parameter does exist!  
  $params['view-all'] = ($params['view-all'] == 'Yes' ? 'No' : 'Yes');  
}
$new_url = $_SERVER['PHP_SELF'].'?'.http_build_query($params);

虽然我从输入中获取url,但它很容易调整为真实的url

var value = 0;

$('#check').click(function()
{
    var originalURL = $('#test').val();
    var exists = originalURL.indexOf('&view-all');

    if(exists === -1)
    {
        $('#test').val(originalURL + '&view-all=value' + value++);
    }
    else
    {
        $('#test').val(originalURL.substr(0, exists + 15) + value++);
    }
});

以下是实现这一点的方法。它采用参数名称和参数值,以及可选的“清除”。如果您提供clear=true,它将删除所有其他参数,只保留新添加的参数-在其他情况下,它将用新参数替换原始参数,或者在querystring中不存在时添加新参数

这是从最初的顶部答案修改而来的,因为如果该答案替换了除最后一个值以外的任何值,则该答案已损坏。这将适用于任何值,并保留现有的顺序

function setGetParameter(paramName, paramValue, clear)
{
clear = typeof clear !== 'undefined' ? clear : false;
var url = window.location.href;
var queryString = location.search.substring(1); 
var newQueryString = "";
if (clear)
{
    newQueryString = paramName + "=" + paramValue;
}
else if (url.indexOf(paramName + "=") >= 0)
{
    var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); };
    var keyValues = queryString.split('&'); 
    for(var i in keyValues) { 
        var key = keyValues[i].split('=');
        if (key.length > 1) {
            if(newQueryString.length > 0) {newQueryString += "&";}
            if(decode(key[0]) == paramName)
            {
                newQueryString += key[0] + "=" + encodeURIComponent(paramValue);;
            }
            else
            {
                newQueryString += key[0] + "=" + key[1];
            }
        }
    } 
}
else
{
    if (url.indexOf("?") < 0)
        newQueryString = "?" + paramName + "=" + paramValue;
    else
        newQueryString = queryString + "&" + paramName + "=" + paramValue;
}
window.location.href = window.location.href.split('?')[0] + "?" + newQueryString;
}
函数setGetParameter(paramName、paramValue、clear)
{
清除=清除类型!=“未定义”?清除:false;
var url=window.location.href;
var queryString=location.search.substring(1);
var newQueryString=“”;
如果(清除)
{
newQueryString=paramName+“=”+paramValue;
}
else if(url.indexOf(paramName+“=”)>=0)
{
var decode=函数{return decodeURIComponent(s.replace(/\+/g,”);};
var keyValues=queryString.split('&');
对于(键值中的变量i){
var key=keyValues[i].split('=');
如果(键长度>1){
如果(newQueryString.length>0){newQueryString+=“&”;}
if(解码(键[0])==参数名)
{
newQueryString+=键[0]+“=”+encodeURIComponent(paramValue);;
}
其他的
{
newQueryString+=键[0]+“=”+键[1];
}
}
} 
}
其他的
{
如果(url.indexOf(“?”)小于0)
newQueryString=“?”+paramName+“=”+paramValue;
其他的
newQueryString=queryString+“&”+paramName+“=”+paramValue;
}
window.location.href=window.location.href.split(“?”)[0]+“?”+newQueryString;
}

我遇到过类似的情况,我想替换URL查询参数。但是,我只有一个参数,我可以简单地替换它:

window.location.search = '?filter=' + my_filter_value

允许您获取或设置URL的查询部分。

我建议对@Lajos的答案稍作修改。。。在我的特殊情况下,可能会有一个散列作为url的一部分,这将导致解析重定向后使用此方法插入的参数时出现问题

function setGetParameter(paramName, paramValue) {
    var url = window.location.href.replace(window.location.hash, '');
    if (url.indexOf(paramName + "=") >= 0) {
        var prefix = url.substring(0, url.indexOf(paramName));
        var suffix = url.substring(url.indexOf(paramName));
        suffix = suffix.substring(suffix.indexOf("=") + 1);
        suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
        url = prefix + paramName + "=" + paramValue + suffix;
    }else {
        if (url.indexOf("?") < 0)
            url += "?" + paramName + "=" + paramValue;
        else
            url += "&" + paramName + "=" + paramValue;
    }
    url += window.location.hash;
    window.location.href = url;
}
函数setGetParameter(paramName,paramValue){
var url=window.location.href.replace(window.location.hash.);
if(url.indexOf(paramName+“=”)>=0){
var prefix=url.substring(0,url.indexOf(paramName));
var后缀=url.substring(url.indexOf(paramName));
后缀=后缀.substring(后缀.indexOf(“=”)+1);
后缀=(后缀.indexOf(“&”)>=0)?后缀.substring(后缀.indexOf(“&”):“”;
url=前缀+参数名+“=”+参数值+后缀;
}否则{
如果(url.indexOf(“?”)小于0)
url+=“?”+paramName+“=”+paramValue;
其他的
url+=“&”+paramName+“=”+paramValue;
}
url+=window.location.hash;
window.location.href=url;
}

这是我用JS重建url查询字符串的示例代码

//函数获取当前参数
$.urlParam
function setGetParameter(paramName, paramValue) {
    var url = window.location.href.replace(window.location.hash, '');
    if (url.indexOf(paramName + "=") >= 0) {
        var prefix = url.substring(0, url.indexOf(paramName));
        var suffix = url.substring(url.indexOf(paramName));
        suffix = suffix.substring(suffix.indexOf("=") + 1);
        suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
        url = prefix + paramName + "=" + paramValue + suffix;
    }else {
        if (url.indexOf("?") < 0)
            url += "?" + paramName + "=" + paramValue;
        else
            url += "&" + paramName + "=" + paramValue;
    }
    url += window.location.hash;
    window.location.href = url;
}
function setGetParameter(paramName, paramValue)
{
  var url = window.location.href;
  var hash = location.hash;
  url = url.replace(hash, '');
  if (url.indexOf("?") >= 0)
  {
    var params = url.substring(url.indexOf("?") + 1).split("&");
    var paramFound = false;
    params.forEach(function(param, index) {
      var p = param.split("=");
      if (p[0] == paramName) {
        params[index] = paramName + "=" + paramValue;
        paramFound = true;
      } 
    });
    if (!paramFound) params.push(paramName + "=" + paramValue);
    url = url.substring(0, url.indexOf("?")+1) + params.join("&");
  }
  else
    url += "?" + paramName + "=" + paramValue;
  window.location.href = url + hash;
}
    <p><!-- Modify this according to your requirement - core script from https://gist.github.com/Joel-James/62d98e8cb3a1b6b05102 and suffix grabbing </p>
    <h3 style="text-align: center;"><span style="color: #ffffff; background-color: #039e00;">►Auto-redirecting after <span id="countdown">35</span> seconds◄</span></h3>
    <p><!-- JavaScript part --><br /><script type="text/javascript">

function findGetParameter(parameterName) {
    var result = null,
        tmp = [];
    location.search
        .substr(1)
        .split("&")
        .forEach(function (item) {
          tmp = item.split("=");
          if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
        });
    return result;
}


    // Total seconds to wait
    var seconds = 45;

    function countdown() {
        seconds = seconds - 1;
        if (seconds < 0) {
            // Chnage your redirection link here
var tid = findGetParameter('tid');
window.location = "https://www.2share.info/ql-cb2/" + '?tid='+tid;
        } else {
            // Update remaining seconds
            document.getElementById("countdown").innerHTML = seconds;
            // Count down using javascript
            window.setTimeout("countdown()", 1000);
        }
    }

    // Run countdown function
    countdown();

</script></p>
var updateQueryStringParameter = function (key, value) {

    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        urlQueryString = document.location.search,
        newParam = key + '=' + value,
        params = '?' + newParam;

    // If the "search" string exists, then build params from it
    if (urlQueryString) {
        var updateRegex = new RegExp('([\?&])' + key + '[^&]*');
        var removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?');

        if( typeof value == 'undefined' || value == null || value == '' ) { 
            params = urlQueryString.replace(removeRegex, "$1");
            params = params.replace( /[&;]$/, "" );

        } else if (urlQueryString.match(updateRegex) !== null) { 
            params = urlQueryString.replace(updateRegex, "$1" + newParam);

        } else {
            params = urlQueryString + '&' + newParam;
        }
    }

    // no parameter was set so we don't need the question mark
    params = params == '?' ? '' : params;

    window.history.replaceState({}, "", baseUrl + params);
};
function changeQS(key, value) {
    let urlParams = new URLSearchParams(location.search.substr(1));
    urlParams.set(key, value);
    location.search = urlParams.toString();
}