Добавить / изменить параметр URL и перенаправить на новый URL

Если&view-all параметр не существует в URL, мне нужно добавить его в конец URL вместе со значением. Если он существует, тогда я должен иметь возможность просто изменить значение, не создавая новый URL, потому что он может иметь или не иметь другие параметры перед ним.

Я нашел эту функцию, но не могу заставить ее работать:https://stackoverflow.com/a/10997390/837705

Вот код, который я использую с помощью функции выше (которую я не могу заставить работать):http://jsfiddle.net/Draven/tTPYL/4/

Я знаю, как добавить параметр и значение уже:

<div onclick="javascript: window.location.assign(window.location.href+='&view-all=Yes');">Blah Blah</div>

Больше информации:

Если URLhttp://www.domain.com/index.php?action=my_action тогда значением по умолчанию «& view-all» будет «Да», поэтому URL-адрес, на который они будут перенаправлены при нажатии кнопки,http://www.domain.com/index.php?action=my_action&view-all=Yes.

Если URLhttp://www.domain.com/index.php?action=my_action&view-all=Yes затем, когда они нажмут на кнопку, она изменится наhttp://www.domain.com/index.php?action=my_action&view-all=No​​​

РЕДАКТИРОВАТЬ: Пожалуйста, дайте мне примеры. Я не знаю много JS, и я просто не могу придумать, как это сделать на PHP.

 Tom Sarduy25 окт. 2012 г., 09:46
почему вы не используете JQuery? ;)
 Draven25 окт. 2012 г., 09:47
@ Tom Мои навыки JS очень плохи. Не могли бы вы привести пример?
 Draven25 окт. 2012 г., 09:46
@Marc Как бы вы предложили мне сделать это на PHP? Я не могу придумать способ.
 Tom Sarduy25 окт. 2012 г., 09:51
@Draven, читая твое обновление, я думаю, что Марк прав в этом, это проще (и безопаснее) с помощью php.
 Marc25 окт. 2012 г., 09:45
Я бы посоветовал сгенерировать правильный URL с помощью PHP, чтобы вам не пришлось возиться с текущим адресом URL ...

Ответы на вопрос(12)

чтобы настроить мой скрипт ниже или найти скрипт, который можно было бы использовать на моем WordPress-сайте, чтобы получить параметры суффикса URL-адреса из прямого URL-адреса, а затем добавить его к URL-адресу щелчка кнопки для отслеживания правильного идентификатора рекламных объявлений.

ПРИЧИНА: параметры используются для отслеживания рекламы, чтобы выяснить, с какой рекламы пользователь перешел, даже если пользователь переходит со страницы optin на страницу продаж с помощью нажатия кнопки.

Вот цель, которую нужно достичь: 1. Объявление FB указывает на страницу с кодом отслеживания:https://ownsite.com/optin-page/?tid=fbad1 2. На странице optin есть кнопка с URL-адресом настройки для пересылки на страницу продаж, но при нажатии на нее будет перенаправлен только URL-адрес, но параметр "? Tid = fbad1" отсутствует. 3. Сценарий авто-пересылки ниже (который работает правильно) может быть использован для изменения нажатия кнопки «вперед», но имеет ограничение, так как он захватывает только параметры «tid», а также параметры utm.

Поэтому должен быть реализован код сценария для установки кнопок щелчка (а также для их стилизации или использования вместо них изображений) и при нажатии на кнопку, чтобы перейти на другую страницу продаж с захватом параметра суффикса с текущей страницы выбора, чтобы затем перейти к продажам. страницаhttps://ownsite.com/sales-page/?tid=fbad1 также включая параметры UTM

В настоящее время я мог бы решить эту проблему с помощью сценария авто-перенаправления, но A.) Я не хочу использовать авто-перенаправление на этой странице. Лучше - кнопка щелчка по событию, используемая, чтобы позволить пользователю самому нажимать кнопку для пересылки с включенным параметром URL. B.) Параметр идентификатора отслеживания в этом сценарии ограничен значением «? Tid = ...». Вместо этого я также хочу отслеживать код UTM по нажатию кнопки, т. Е. Получить с текущей страницы параметр URLhttps://www.optin-page.com/?tid=facebookad1?utm_campaign=blogpost затем нажмите кнопку, выберите параметры и добавьте к кнопке набор URLhttps://www.sales-page.com/?tid=facebookad1?utm_campaign=blogpost

Теперь, пожалуйста, найдите здесь код, используемый ниже для автоматического перенаправления и получения параметров URL. Теперь этот код должен быть изменен, чтобы можно было создать кнопку с событием щелчка для перенаправления, а затем на прямой URL-адрес с захватом параметров текущего URL-адреса при нажатии кнопки (как указано выше).

    <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>

В 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';
}

а, а также необязательное значение «очистить». Если вы укажете clear = true, он удалит все остальные параметры и просто оставит только что добавленный - в других случаях он либо заменит оригинал новым, либо добавит его, если его нет в строке запроса.

Это изменено от исходного верхнего ответа, поскольку тот сломался, если он заменил что-либо кроме последнего значения. Это будет работать для любого значения и сохранить существующий порядок.

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;
}

его легко настроить на реальный 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++);
    }
});

http://jsfiddle.net/8YPh9/31/

у вас есть пара параметров для просмотра вашей страницы, скажем,action а такжеview-all, Вы (вероятно) получите доступ к ним уже с$action = $_GET['action'] или что угодно, может быть установка значения по умолчанию.

Затем вы решаете в зависимости от этого, если вы хотите, чтобы переменная, как$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'.

И в конце вы просто создаете URL с этими значениями снова, как

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

Вот и все.

Таким образом, вы зависите от статуса страницы, а не от URL-адреса пользователя (потому что, возможно, позже вы решите, что $ viewAll по умолчанию равно Да или как-то еще)

 Draven25 окт. 2012 г., 09:55
Я не понимаю, как это будет работать, если послеaction, Возможно, URLhttp://www.domain.com/index.php?action=my_action&folder=1&view-all=Yes
 Marc25 окт. 2012 г., 09:56
Конечно, вам нужны все из них, но в любом случае они есть в PHP для отображения вашей страницы?

//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. Однако у меня был только один параметр, и я мог просто заменить его:

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

location.search свойство позволяет получить или установить часть запроса URL-адреса.

Решение Вопроса
function setGetParameter(paramName, paramValue)
{
    var url = window.location.href;
    var hash = location.hash;
    url = url.replace(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;
    }
    window.location.href = url + hash;
}

 Wertisdk24 июн. 2014 г., 10:10
Я исправил небольшую ошибку, где функция обрабатывает# в URL-адресе неправильно и задает параметр в конце URL-адреса, где он должен быть установлен непосредственно перед#, Я поместил новую функцию в этот pastebin:pastebin.com/3R96LKZu
 ZurabWeb14 янв. 2014 г., 16:47
Если paramName = paramValue не находится в конце строки URL, тогда остальная часть строки URL удаляется. Пример? View = test & page = 2 & sort = asc переключится на? View = test & page = 3 и параметр сортировки потеряется. В противном случае функция очень хорошая. Спасибо.
 Vladimirs17 февр. 2015 г., 17:03
Что оencodeURIComponent(paramValue)?
 Nico25 мар. 2014 г., 22:41
@LajosArpad Я отредактировал ваше сообщение и сделал исправление, как я описал в моем предыдущем комментарии.
 Nico25 мар. 2014 г., 22:34
@Piero это потому, что в коде есть ошибка: следующую строку необходимо переписать var суффикс = url.substring (url.indexOf (paramName)). Substring (url.indexOf ("=") + 1); двумя строками: суффикс var = url.substring (url.indexOf (paramName)); суффикс = суффикс.substring (суффикс.indexOf ("=") + 1);

туации я мог бы потенциально иметь хеш в качестве части 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;
}

НапримерHttp: // хуг ча = 1 & а = 2? не будет выбирать параметр, но ок. Вот функция, которая просматривает параметры и проверяет их.

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;
}
 devi17 мая 2017 г., 13:21
это как все другие решения вызывают перенаправление. Могу ли я изменить значение параметра и остаться на этой странице?
 Pcs21 мая 2017 г., 07:13
Конечно, вы можете хранить URL в переменной и изменять его без перенаправления.
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 get current parameters
$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null){
        return null;
    }
    else{
        return results[1] || 0;
    }
};

//build a new parameters
var param1 = $.urlParam('param1');
var param2 = $.urlParam('param2');

//check and create an array to save parameters
var params = {};
    if (param1 != null) {
        params['param1'] = param1;
    }
    if (order != null) {
        params['param2'] = param2;
    }

//build a new url with new parameters using jQuery param
window.location.href =  window.location.origin + window.location.pathname + '?' + $.param(params);

Я использовал JQUERY param:http://api.jquery.com/jquery.param/ создать новый URL с новыми параметрами.

Ваш ответ на вопрос