url'ye ekle ve sayfayı yenile


Yanıtlar:


163

bu çalışmalıdır (test edilmemiştir!)

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

1
str.search (regex) srt.indexOf (str2) 'den daha hızlı
xavierm02

1
Ve değişken adı ve encodeURIComponent () ile değişken parametresi olan bir ull örneği vermelisiniz.
xavierm02

Ve> -1 örneği, kullanmalısınız! == -1
xavierm02

8
bunu takip edersek, parametre zaten bir url'de mevcutsa yeni bir parametre eklemek yerine değerini güncellemem mantığını nasıl ekleyebilirim?
amatör

1
bu, çapayı (hash değeri) url'den çıkarır, eğer varsa, @amateur bunu yapan bir işlevi burada bulabilirsiniz: stackoverflow.com/questions/486896/…
Doug Molineux

143

Kabul edilen cevaptan daha kısa, aynısını yapıyor, ancak basit tutuyor:

window.location.search += '&param=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.


11
Bunun tek parametre olacağını bildiğiniz bir durumda, eklemek yerine aramayı da ayarlayabilirsiniz:window.location.search = '?param=42';
Dave DuPlantis

1
İyi iş!! Doğru, en basit ve optimize edilmiş yol; kabul edilen cevap olmalıydı.
Rohit

Ya url'niz: www.mysite.com ise ... o zaman url'yi yapmaz: www.mysite.com & param = 42 "?" URL'deki tek parametre olduğu için karakter. @Shlomi Komemi cevabını bu 2 ana senaryoyu kapsadığı için seviyorum.
greatKing

1
@greaterKing, konumun arama özelliğine parametreler eklerken soru işareti ekler. Tarayıcı konsolunuzda deneyin.
Bo Frederiksen

1
Benim kötü @BoFrederiksen gerçekten haklısın ... bunun için üzgünüm. "+ =" kaba ... bunu kaçırdı. Benden +1.
greatKing

71

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 + "&parameter=" + 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/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=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');

1
Neden sadece kullanmıyoruz:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO

@ SébastienGarcia-Roméo Evet, bu ilginç bir yaklaşım ve gerçekten de geçerli, ancak fonksiyonun bu şekilde programlanmasının iki nedeni var. 1. Mevcut yinelenen parametreleri ortadan kaldırmak için. 2. Mevcut bir parametrenin değerinin üzerine yazmak için. Bu bakış açısından, şimdi kullanımı indexOfkoda gereksiz karmaşıklık getirebilir.
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;
}

Daha uyumlu sürüm

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

1

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+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;

1

@ 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(/\?|&amp;/);


Lütfen bu tür düzeltmeleri bir yorumda yayınlayın veya önerin ve düzenleyin. Ayrı bir cevabı garanti etmezler.
JJ for Transparency and Monica

1

Bunu dene

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

0

Ayrıca:

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

Yer imlerinde kullanılabilen sadece bir satırlık Shlomi yanıtı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.