Yanıtlar:
bu çalışmalıdır (test edilmemiştir!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Kabul edilen cevaptan daha kısa, aynısını yapıyor, ancak basit tutuyor:
window.location.search += '¶m=42';
Tüm url'yi, sadece konumun arama özelliği olarak bilinen sorgu dizesini değiştirmek zorunda değiliz.
Arama özelliğine bir değer atadığınızda, soru işareti tarayıcı tarafından otomatik olarak eklenir ve sayfa yeniden yüklenir.
window.location.search = '?param=42';
Buradaki yanıtların çoğu, aşağıdaki kod parçacığı veya benzer bir varyasyon gibi bir şeyin URL'ye parametre (ler) eklenmesi gerektiğini önermektedir:
location.href = location.href + "¶meter=" + value;
Bu, vakaların çoğunda oldukça iyi çalışacaktır.
ancak
Bana göre bir URL'ye parametre eklemenin doğru yolu bu değil.
Önerilen yaklaşım, parametrenin URL'de önceden ayarlanıp ayarlanmadığını test etmediğinden, dikkatli olunmazsa, aynı parametrenin birden çok kez tekrarlandığı çok uzun bir URL ile sonuçlanabilir. yani:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
bu noktada sorunların başladığı yerdir. Önerilen yaklaşım, birden çok sayfa yenilendikten sonra çok uzun bir URL oluşturabilir ve oluşturacaktır, dolayısıyla URL'yi geçersiz kılar. Uzun URL hakkında daha fazla bilgi için bu bağlantıyı izleyin Farklı tarayıcılarda bir URL'nin maksimum uzunluğu nedir?
Bu benim önerdiğim yaklaşım:
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;
}
Bu işlevle, yalnızca aşağıdakileri yapmanız gerekecektir:
location.href = URL_add_parameter(location.href, 'param', 'value');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
koda gereksiz karmaşıklık getirebilir.
function gotoItem( item ){
var url = window.location.href;
var separator = (url.indexOf('?') > -1) ? "&" : "?";
var qs = "item=" + encodeURIComponent(item);
window.location.href = url + separator + qs;
}
Daha uyumlu sürüm
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
Lütfen aşağıdaki kodu kontrol edin:
/*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;
@ Yeyo'nun yukarıdaki düşünceli cevabı için küçük bir hata düzeltmesi.
Değişiklik:
var parameters = parser.search.split(/\?|&/);
Kime:
var parameters = parser.search.split(/\?|&/);
Bunu dene
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);