Jawaban:
ini seharusnya bekerja (tidak diuji!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Lebih pendek dari jawaban yang diterima, melakukan hal yang sama, tetapi menjaganya tetap sederhana:
window.location.search += '¶m=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.
window.location.search = '?param=42';
Sebagian besar jawaban di sini menyarankan bahwa seseorang harus menambahkan parameter ke URL, sesuatu seperti cuplikan berikut atau variasi serupa:
location.href = location.href + "¶meter=" + 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/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=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');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
mungkin memperkenalkan kompleksitas yang tidak perlu pada kode.
location.href = location.href + "¶meter=" + value;
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;
}
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+'¶m='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
Satu perbaikan bug kecil untuk jawaban bijaksana @ yeyo di atas.
Perubahan:
var parameters = parser.search.split(/\?|&/);
Untuk:
var parameters = parser.search.split(/\?|&/);
Coba ini
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);