javascript - 附加到 URL 並刷新頁面
我想寫一段 JavaScript 來在當前網址後附加一個參數,然後刷新頁面——我該怎麼做?
答案#1
解決方案:
let url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
} else {
url += '?param=1'
}
window.location.href = url;
答案#2
比公認答案短,做同樣的事,但保持簡單:
window.location.search += '¶m=42';
我們不需要更改整個 URL,只需要更改查詢字串,即位置的 search 屬性。
當你為搜尋屬性分配值時,瀏覽器會自動插入問號,並重新載入頁面。
答案#3
這裡的大多數答案建議應該將參數附加到 URL 上,類似以下片段或相似的變體:
location.href = location.href + "¶meter=" + value;
這對大多數情況來說都相當有效。
然而
依我看,那不是在 URL 中附加參數的正確方式。
因為建議的方法並沒有測試參數是否已經在 URL 中設置,如果不小心,可能會最後得到一個非常長的 URL,且同一個參數會重複多次。例如:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
問題從這一點開始。建議的方法在多次頁面刷新後可能會且確實會產生非常長的 URL,從而使 URL 失效。請點擊此連結以了解有關長 URL 的更多資訊,不同瀏覽器中 URL 的最大長度是多少?
這是我建議的方法:
function URL_add_parameter(url, param, value){
var hash = {};
var parser = document.createElement('a');
parser.href = url;
var parameters = parser.search.split(/\?|&/);
for(var i=0; i < parameters.length; i++) {
if(!parameters[i])
continue;
var ary = parameters[i].split('=');
hash[ary[0]] = ary[1];
}
hash[param] = value;
var list = [];
Object.keys(hash).forEach(function (key) {
list.push(key + '=' + hash[key]);
});
parser.search = '?' + list.join('&');
return parser.href;
}
使用這個功能,只需做以下操作:
location.href = URL_add_parameter(location.href, 'param', 'value');
答案#4
如果你正在為現代瀏覽器開發,與其自己解析 URL 參數,不如使用內建的 URL 函數來幫你這樣做:
const parser = new URL(url || window.location);
parser.searchParams.set(key, value);
window.location = parser.href;
