網站搜尋

javascript - 附加到 URL 並刷新頁面


我想寫一段 JavaScript 來在當前網址後附加一個參數,然後刷新頁面——我該怎麼做?

答案#1

解決方案:

let url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
} else {
   url += '?param=1'
}
window.location.href = url;

答案#2

比公認答案短,做同樣的事,但保持簡單:

window.location.search += '&param=42';

我們不需要更改整個 URL,只需要更改查詢字串,即位置的 search 屬性。

當你為搜尋屬性分配值時,瀏覽器會自動插入問號,並重新載入頁面。

答案#3

這裡的大多數答案建議應該將參數附加到 URL 上,類似以下片段或相似的變體:

location.href = location.href + "&parameter=" + value;

這對大多數情況來說都相當有效。

然而

依我看,那不是在 URL 中附加參數的正確方式。

因為建議的方法並沒有測試參數是否已經在 URL 中設置,如果不小心,可能會最後得到一個非常長的 URL,且同一個參數會重複多次。例如:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=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;