添加/更改URL的参数并重定向到新URL
如果URL中不存在&view-all
参数,我需要将其与值一起添加到URL的末尾。 如果它存在,那么我需要能够在不创建新URL的情况下更改值,因为它可能会或可能不会在其之前有其他参数。
我找到了这个function,但我无法让它工作: https : //stackoverflow.com/a/10997390/837705
这是我使用上面的函数的代码(我无法工作): http : //jsfiddle.net/Draven/tTPYL/4/
我知道如何附加参数和值:
更多信息:
如果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
。
如果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做的方法。
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事件中调用上面的函数。
所有临时解决方案都没有考虑参数中子字符串的可能性。 例如, 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; }
虽然我从输入中获取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++); } });
我有类似的情况,我想替换URL查询参数。 但是,我只有一个参数,我可以简单地替换它:
window.location.search = '?filter=' + my_filter_value
location.search
属性允许您获取或设置URL的查询部分。
要在PHP中执行此操作:您需要使用几个参数来查看页面,然后说出action
和view-all
。 您可能(可能)已经使用$action = $_GET['action']
或其他任何方式访问这些,可能会设置默认值。
然后根据这个决定你是否想要改变像$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'
这样的变量$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'
$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'
。
最后,您只需再次使用这些值构建URL
$clickUrl = $_SERVER['PHP_SELF'] . '?action=' . $action . '&view-all=' . $viewAll;
就是这样。
因此,您依赖于页面状态而不是用户URL(因为您可能稍后决定$ viewAll是默认值或其他)。
这是实现这一目标的一种方式。 它采用参数名称和参数值,以及可选的“清除”。 如果你提供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; }
我认为像这样的东西会起作用,升级@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);
我建议对@ 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; }
一些简单的想法,让你去:
在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'; }
这是我用JS重建url查询字符串的示例代码
//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);
我需要帮助来调整下面的脚本或者找到一个可以在我的wordpress网站上使用的脚本来从转发url中获取url后缀参数,然后在按钮点击url上添加以跟踪正确的转发广告ID。
原因:参数用于广告跟踪,以找出用户转发的广告,即使用户使用按钮点击从optin页面跳转到销售页面。
这里的目标是:1。FB广告指向带有跟踪代码的optin页面: https ://ownsite.com/optin-page/?tid = fbad1 2.在optin页面上有一个带设置的按钮转发到销售页面的URL,但如果单击,则只有URL转发,但缺少参数“?tid = fbad1”。 3.下面的自动转发脚本(工作正常)可用于更改按钮点击转发,但有一个限制,因为它只获取“tid”参数而不是utm参数。
因此,应实现脚本代码以建立点击按钮(也用于设置样式或使用图像),同时单击按钮以转发到不同的销售页面,同时从当前的optin页面获取后缀参数,然后转发给销售人员 – 页面https://ownsite.com/sales-page/?tid=fbad1还包括UTM参数
目前,我可以通过使用自动重定向脚本解决这个问题,但是A.)我不想在此页面使用autoredirect。 更好的是一个事件点击按钮,用于让用户自己单击以包含URL参数。 B.)此脚本中的跟踪ID参数仅限于“?tid = …”,而我还希望在按钮点击时跟踪UTM代码,即从当前页面抓取URL https:// www的参数。然后在按钮上单击抓取参数并添加到按钮集URL https://www.sales-page.com/?tid=facebookad1?utm_campaign=blogpost
现在请在此处找到用于自动重定向和获取URL参数的以下代码。 现在应该更改此代码,以便能够创建一个按钮,其中点击事件将被重定向,然后转到前向URL,如果单击该按钮,则参数抓取当前URL(如上所述)。