tambahkan ke url dan segarkan halaman

134

Saya ingin menulis sepotong javascript yang akan menambahkan parameter ke url saat ini dan kemudian menyegarkan halaman - bagaimana saya bisa melakukan ini?

amatir
sumber
Solusi paling optimal yang saya temukan: stackoverflow.com/a/38792165/1783439
nu everest

Jawaban:

162

ini seharusnya bekerja (tidak diuji!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;
Shlomi Komemi
sumber
1
str.search (regex) lebih cepat dari srt.indexOf (str2)
xavierm02
1
Dan Anda harus memberikan contoh ull dengan nama variabel dan parameter variabel dengan encodeURIComponent ().
xavierm02
Dan insteand> -1, Anda harus menggunakan! == -1
xavierm02
8
satu tindak lanjut untuk ini, bagaimana bisa menambahkan beberapa logika bahwa jika parameter sudah ada dalam url saya memperbarui nilainya daripada menambahkan parameter baru?
amatir
1
ini akan mengambil jangkar (nilai hash) dari url, jika ada, @amateur Anda dapat menemukan fungsi yang melakukannya di sini: stackoverflow.com/questions/486896/…
Doug Molineux
143

Lebih pendek dari jawaban yang diterima, melakukan hal yang sama, tetapi menjaganya tetap sederhana:

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

Kami tidak harus mengubah seluruh url, hanya string kueri, yang dikenal sebagai atribut pencarian lokasi.

Ketika Anda memberikan nilai ke atribut pencarian, tanda tanya secara otomatis dimasukkan oleh browser dan halaman dimuat ulang.

Bo Frederiksen
sumber
11
Untuk kasus di mana Anda tahu ini akan menjadi satu-satunya parameter, Anda juga dapat mengatur pencarian alih-alih menambahkannya:window.location.search = '?param=42';
Dave DuPlantis
1
Kerja bagus!! Cara yang benar, paling sederhana dan optimal; seharusnya jawaban yang diterima.
Rohit
Bagaimana jika url Anda adalah: www.mysite.com ... maka bukankah itu akan membuat url: www.mysite.com & param = 42 yang memerlukan "?" karakter sejak itu satu-satunya parameter dalam url. Saya suka jawaban @Shlomi Komemi karena mencakup 2 skenario utama.
Greater King
1
@greaterKing browser menambahkan tanda tanya, saat menambahkan parameter ke atribut pencarian lokasi. Cobalah di konsol browser Anda.
Bo Frederiksen
1
@BoFrederiksen buruk Anda, Anda memang benar ... srry tentang hal itu. "+ =" dari kasar ... ketinggalan itu. +1 dari saya.
Greater King
70

Sebagian besar jawaban di sini menyarankan bahwa seseorang harus menambahkan parameter ke URL, sesuatu seperti cuplikan berikut atau variasi serupa:

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

Ini akan bekerja dengan baik untuk sebagian besar kasus.

Namun

Menurut saya itu bukan cara yang benar untuk menambahkan parameter ke URL.

Karena pendekatan yang disarankan tidak menguji jika parameter sudah diatur dalam URL, jika tidak hati-hati orang akan berakhir dengan URL yang sangat panjang dengan parameter yang sama berulang beberapa kali. yaitu:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

pada titik ini adalah di mana masalah dimulai. Pendekatan yang disarankan dapat dan akan membuat URL yang sangat panjang setelah beberapa halaman di-refresh, sehingga membuat URL tidak valid. Ikuti tautan ini untuk informasi lebih lanjut tentang URL panjang. Berapa panjang maksimum URL di berbagai browser?

Ini adalah pendekatan yang saya sarankan:

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

Dengan fungsi ini kita harus melakukan hal berikut:

location.href = URL_add_parameter(location.href, 'param', 'value');
yeyo
sumber
1
Mengapa tidak menggunakan saja:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO
@ SébastienGarcia-Roméo Ya itu pendekatan yang menarik, dan memang valid, namun, ada dua alasan mengapa fungsi tersebut diprogram dengan cara itu. 1. Untuk menghilangkan parameter duplikat yang ada. 2. Untuk menimpa nilai parameter yang ada. Dari sudut pandang ini, sekarang penggunaan indexOfmungkin memperkenalkan kompleksitas yang tidak perlu pada kode.
yeyo
3
location.href = location.href + "&parameter=" + value;
Paul Alexander
sumber
2
Parameter semakin digandakan
Arun Prasad ES
2
function gotoItem( item ){
    var url = window.location.href;
    var separator = (url.indexOf('?') > -1) ? "&" : "?";
    var qs = "item=" + encodeURIComponent(item);
    window.location.href = url + separator + qs;
}

Versi yang lebih kompatibel

function gotoItem( item ){
    var url = window.location.href;    
    url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
    window.location.href = url;
}
epascarello
sumber
1

Silakan periksa kode di bawah ini:

/*Get current URL*/    
var _url = location.href; 
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
Aftab
sumber
1

Satu perbaikan bug kecil untuk jawaban bijaksana @ yeyo di atas.

Perubahan:

var parameters = parser.search.split(/\?|&/);

Untuk:

var parameters = parser.search.split(/\?|&amp;/);

Gabrien
sumber
Silakan kirim koreksi seperti itu dalam komentar atau usulkan dan edit. Mereka tidak menjamin jawaban yang terpisah.
JJ untuk Transparansi dan Monica
1

Coba ini

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);
Atchutha rama reddy Karri
sumber
0

Juga:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

Hanya satu liner jawaban Shlomi yang dapat digunakan di bookmarklet

estani
sumber