tambahkan ke url dan segarkan halaman


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;

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.


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');

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


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

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;

1

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

Perubahan:

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

Untuk:

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


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

0

Juga:

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

Hanya satu liner jawaban Shlomi yang dapat digunakan di bookmarklet

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.