JavaScript'te "GET" istek parametreleri nasıl alınır?


Yanıtlar:


185

Tüm veriler altında mevcuttur

window.location.search

dizeyi çözümlemeniz gerekir, örneğin.

function get(name){
   if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search))
      return decodeURIComponent(name[1]);
}

sadece parametre olarak GET değişken adı olan işlevi çağırın, örn.

get('foo');

bu işlev, değişkenin değeri yoksa veya yoksa tanımsız değişken değerini veya tanımsız döndürür


@Daniel Silveira: evet, değeri çözebilir / çözmelidir (ve adı kodlamalı). Gönderimi birkaç dakika içinde düzenleyeceğim
Rafael

2
DecodeURIComponent öğesinin / tüm / olası URI çıkışlarının kodunu çözmediğini unutmayın. Özellikle "+", "" olarak çözülmez. (Bunun hangi tarayıcıda olduğunu unuttum. FF, belki?) Spesifikasyon, yalnızca tam olarak hangi encodeUIRComponent kodlamasını çözmelerini gerektiriyor ve "" "% 20" olarak kodlanacak, bu nedenle "+" tek başına kaldı.
Jesse Rusak

Bu yüzden PHP'yi seviyorum
ymakux

2
@volocuga, PHP'den farklı olarak, JavaScript'te URL'lerle uğraşmak oldukça nadir bir işlemdir, bu nedenle tarayıcı satıcıları hiçbir zaman bu özelliklere odaklanmadı.
Rafael

zekice cevapladı Rafael;)
Jalal Sordo

36

Bunu jquery.urlbeğendim kullanabilirsin :

var xyz = jQuery.url.param("param_in_url");

Kaynak kodunu kontrol edin

Güncellenen Kaynak: https://github.com/allmarkedup/jQuery-URL-Parser


1
Harika yanıt, ancak bağlantınız kesildi
Adam Casey

@Adam öyle görünecektir. Bunun güncellenmiş URL olduğunu düşünüyorum: github.com/allmarkedup/jQuery-URL-Parser Mark Perkins jquery.url'de yapılan bir Google araması beni bir güncellemeye yönlendirdi. İhtiyacınız olursa, bu cevabı gönderdiğim zamandan kaynak bende.
Kaos

3
Yani bir eklenti gerekli mi?
JohnK

var xyz = jQuery.url().param("param_in_url");jQuery.url()geçerli sayfa URL'sini veren doğru sözdizimidir . Lütfen düzeltmeyi yapın.
Ahmed Akhtar

13

Sadece iki sentimi koymak için, tüm istekleri içeren bir nesne istiyorsanız

function getRequests() {
    var s1 = location.search.substring(1, location.search.length).split('&'),
        r = {}, s2, i;
    for (i = 0; i < s1.length; i += 1) {
        s2 = s1[i].split('=');
        r[decodeURIComponent(s2[0]).toLowerCase()] = decodeURIComponent(s2[1]);
    }
    return r;
};

var QueryString = getRequests();

//if url === "index.html?test1=t1&test2=t2&test3=t3"
console.log(QueryString["test1"]); //logs t1
console.log(QueryString["test2"]); //logs t2
console.log(QueryString["test3"]); //logs t3

Unutmayın, her get parametresi için anahtar küçük harfe ayarlanmıştır. Bu yüzden yardımcı bir işlev yaptım. Yani şimdi büyük / küçük harfe duyarlı değil.

function Request(name){
    return QueryString[name.toLowerCase()];
}

1
Bu yöntemi gerçekten beğendim. +1
TR3B

12

Aşağıdaki kodu deneyin, GET parametrelerini url'den almanıza yardımcı olacaktır. daha fazla ayrıntı için.

 var url_string = window.location.href; // www.test.com?filename=test
    var url = new URL(url_string);
    var paramValue = url.searchParams.get("filename");
    alert(paramValue)

örnekte çalışmaz localhost: 8080 / # /? access_token = 111 location.hash parçası nedeniyle. '#' Sembolü ortaya çıkarsa konum arama boştur
Maksim Tikhonov

"#" sembollü url desteklenmediğinden onu kaldırmamız gerekiyor. şunu deneyin: var url_string = window.location.href; // www.test.com?filename=test var url = yeni URL (url_string.replace ("# /", "")); var paramValue = url.searchParams.get ("access_token"); alert (paramValue)
VISHNU Radhakrishnan

Internet Explorer'da desteklenmiyor
Sebastian Scholle

5

GET değişkenlerini almak için URL'yi kullanabilirsiniz. Özellikle, window.location.search'?' İşaretinden sonraki (ve dahil) her şeyi verir. Sen window.location hakkında daha fazla bilgi bulabilirsiniz burada .


3

Bugün ben biraz ile birlikte aşağıdaki koymak bu yüzden bir ilişkisel dizi haline sayfanın isteği parametrelerini almak için gereken yardımı dan benim arkadaşlar . Ayrıca bir =as olmadan parametreleri de işler true.

Bir örnekle:

// URL: http://www.example.com/test.php?abc=123&def&xyz=&something%20else

var _GET = (function() {
    var _get = {};
    var re = /[?&]([^=&]+)(=?)([^&]*)/g;
    while (m = re.exec(location.search))
        _get[decodeURIComponent(m[1])] = (m[2] == '=' ? decodeURIComponent(m[3]) : true);
    return _get;
})();

console.log(_GET);
> Object {abc: "123", def: true, xyz: "", something else: true}
console.log(_GET['something else']);
> true
console.log(_GET.abc);
> 123

2

GET parametrelerini elde etmek için mevcut sayfanın URL'sini ayrıştırabilirsiniz. URL kullanılarak bulunabilir location.href.


Sunucu sizi başka bir yere yönlendirmiş olabileceğinden, bunun tamamen güvenilir olmadığını unutmayın. Ama yapabileceğinin en iyisi bu.
Joel Coehoorn


2

Harita küçültme çözümü:

var urlParams = location.search.split(/[?&]/).slice(1).map(function(paramPair) {
        return paramPair.split(/=(.+)?/).slice(0, 2);
    }).reduce(function (obj, pairArray) {            
        obj[pairArray[0]] = pairArray[1];
        return obj;
    }, {});

Kullanım:

For url: http://example.com?one=1&two=2
console.log(urlParams.one) // 1
console.log(urlParams.two) // 2

1
Bunun için neden bir harita azaltma çözümü kullandığınızı açıklayabilir misiniz? Anladığım kadarıyla, harita azaltma, gerçekten büyük veri kümelerini işlerken etkilidir. Bu sadece bir HTTP isteği olduğundan, bir harita azaltma çözümü kullanmanın amacını görmüyorum.
JorgeGRC

aslında map/reducesadece bir koleksiyon işleme mekanizmasıdır: her boyuttaki veriyle kullanılabilir. paralelleştirme istekliliği nedeniyle büyük verilerle daha ünlüdür
StephenBoesch

1

Diğer yanıtların aksine, UrlSearchParamsnesne Regexes veya diğer dize manipülasyonlarını kullanmaktan kaçınabilir ve çoğu modern tarayıcıda mevcuttur:

var queryString = location.search
let params = new URLSearchParams(queryString)
// example of retrieving 'id' parameter
let id = parseInt(params.get("id"))
console.log(id)

bu yanıtı diğerlerinden biraz daha farklı kılmak için biraz açıklama ekleyebilir misiniz?
Giulio Caccin

0

Buradaki işlev parametreyi ada göre döndürür. Küçük değişikliklerle temel url, parametre veya çapa döndürebileceksiniz.

function getUrlParameter(name) {
    var urlOld          = window.location.href.split('?');
    urlOld[1]           = urlOld[1] || '';
    var urlBase         = urlOld[0];
    var urlQuery        = urlOld[1].split('#');
    urlQuery[1]         = urlQuery[1] || '';
    var parametersString = urlQuery[0].split('&');
    if (parametersString.length === 1 && parametersString[0] === '') {
        parametersString = [];
    }
    // console.log(parametersString);
    var anchor          = urlQuery[1] || '';

    var urlParameters = {};
    jQuery.each(parametersString, function (idx, parameterString) {
        paramName   = parameterString.split('=')[0];
        paramValue  = parameterString.split('=')[1];
        urlParameters[paramName] = paramValue;
    });
    return urlParameters[name];
}

0

Benim için çalışıyor

url: http: // localhost: 8080 / # /? access_token = 111

function get(name){
  const parts = window.location.href.split('?');
  if (parts.length > 1) {
    name = encodeURIComponent(name);
    const params = parts[1].split('&');
    const found = params.filter(el => (el.split('=')[0] === name) && el);
    if (found.length) return decodeURIComponent(found[0].split('=')[1]);
  }
}
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.