Добавить/изменить параметр URL-адреса и перенаправить на новый URL-адрес
Если параметр &view-all
НЕ существует в URL-адресе, мне нужно добавить его в конец URL-адреса вместе со значением. Если он существует, мне нужно просто изменить значение без создания нового URL-адреса, потому что он может или не может иметь другие параметры перед ним.
Я нашел эту функцию, но я не могу заставить ее работать: qaru.site/info/14682/...
Вот код, который я использую вышеприведенную функцию (с которой я не могу работать): http://jsfiddle.net/Draven/tTPYL/4/
Я знаю, как добавить параметр и значение уже:
<div onclick="javascript: window.location.assign(window.location.href+='&view-all=Yes');">Blah Blah</div>
Дополнительная информация:
Если URL-адрес http://www.domain.com/index.php?action=my_action
, то значением по умолчанию "& view-all" будет "Да", поэтому URL-адрес, на который они будут направлены, при нажатии кнопки http://www.domain.com/index.php?action=my_action&view-all=Yes
.
Если URL-адрес http://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.
Ответы
Ответ 1
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;
}
Вызовите функцию выше в вашем событии onclick.
Ответ 2
Все преваливные решения не учитывают возможности подстроки в параметре. Например http://xyz?ca=1&a=2 не будет выбирать параметр a, но ca. Вот функция, которая проходит через параметры и проверяет их.
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;
}
Ответ 3
У меня была аналогичная ситуация, когда я хотел заменить параметр запроса URL. Однако у меня был только один параметр, и я мог просто заменить его:
window.location.search = '?filter=' + my_filter_value
Свойство location.search
позволяет вам получить или установить часть запроса URL-адреса.
Ответ 4
хотя я беру 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++);
}
});
http://jsfiddle.net/8YPh9/31/
Ответ 5
Чтобы сделать это в PHP: у вас есть пара параметров для просмотра вашей страницы, скажем action
и view-all
. Вы, вероятно, будете обращаться к ним уже с помощью $action = $_GET['action']
или что-то еще, возможно, установив значение по умолчанию.
Затем вы решаете в зависимости от этого, если вы хотите использовать переменную типа $viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'
.
И в итоге вы просто создадите URL-адрес с этими значениями снова, как
$clickUrl = $_SERVER['PHP_SELF'] . '?action=' . $action . '&view-all=' . $viewAll;
И вот оно.
Таким образом, вы зависите от статуса страницы, а не URL-адреса пользователей (потому что, возможно, позже вы решите, что $viewAll - это значение по умолчанию или что-то еще).
Ответ 6
Некоторые простые идеи, которые помогут вам:
В 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';
}
Ответ 7
Я думаю, что что-то вроде этого будет работать, обновив код @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);
Ответ 8
Вот способ выполнения этого. Он принимает имя параметра и значение параметра, а также необязательное значение "clear". Если вы поставьте 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;
}
Ответ 9
я бы предложил небольшое изменение для ответа @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;
}
Ответ 10
Это мой пример кода для перестроения строки запроса url с помощью JS
//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);
Ответ 11
Мне нужна помощь, чтобы настроить мой скрипт ниже или найти скрипт, который можно было бы использовать на моем WordPress-сайте, чтобы получить параметры суффикса URL-адреса из прямого URL-адреса, а затем добавить его к URL-адресу щелчка кнопки для отслеживания правильного идентификатора рекламных объявлений.
ПРИЧИНА: параметры используются для отслеживания рекламы, чтобы выяснить, с какой рекламы пользователь перешел, даже если пользователь переходит со страницы optin на страницу продаж с помощью нажатия кнопки.
Вот цель, которую нужно достичь: 1. Объявление FB указывает на страницу optin с кодом отслеживания: 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 по нажатию кнопки, т.е. Получить с текущей страницы параметр URL https://www. optin-page.com/?tid=facebookad1?utm_campaign=blogpost затем нажмите на кнопку, выберите параметры и добавьте к URL- адресу набора кнопок https://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>
Ответ 12
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);
};
Ответ 13
Зачем разбирать строку запроса самостоятельно, если вы можете позволить браузеру сделать это за вас?
function changeQS(key, value) {
let urlParams = new URLSearchParams(location.search.substr(1));
urlParams.set(key, value);
location.search = urlParams.toString();
}