JQuery ile GET ve POST değişkenleri nasıl alınır?


96

JQuery ile nasıl basitçe GETve POSTdeğerler alabilirim ?

Yapmak istediğim şey şuna benzer:

$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));

Yanıtlar:


171

GET parametreleri için bunları şu adresten alabilirsiniz document.location.search:

var $_GET = {};

document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
        return decodeURIComponent(s.split("+").join(" "));
    }

    $_GET[decode(arguments[1])] = decode(arguments[2]);
});

document.write($_GET["test"]);

POST parametreleri için, $_POSTnesneyi JSON biçiminde bir <script>etikete serileştirebilirsiniz :

<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;

document.write($_POST["test"]);
</script>

Siz oradayken (sunucu tarafında bir şeyler yaparken), GET parametrelerini PHP'de de toplayabilirsiniz:

var $_GET = <?php echo json_encode($_GET); ?>;

Not: Yerleşik json_encodeişlevi kullanmak için PHP sürüm 5 veya üstüne ihtiyacınız olacak .


Güncelleme: İşte daha genel bir uygulama:

function getQueryParams(qs) {
    qs = qs.split("+").join(" ");
    var params = {},
        tokens,
        re = /[?&]?([^=]+)=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])]
            = decodeURIComponent(tokens[2]);
    }

    return params;
}

var $_GET = getQueryParams(document.location.search);

3
Ayıklama yönteminiz değeri olmayan bağımsız değişkenleri dikkate almıyor (”? Foo & bar = baz“ => {foo: "", bar: "baz"}).
Gumbo

1
Güzel yakaladın Gumbo! Normal ifadedeki = isteğe bağlı yapılmalıdır: ... kırp ... (?: = ([^ &] *))? &?) / G
Ates Goral

1. İlk GET örneğiniz benim için işe yaramıyor gibi görünüyor. 2. Güncellemenizde, işlev adınızda bir yazım hatası var
Jake Wilson

Bunu safari veya kromda çalıştırmayı denediniz mi? Sonsuz bir döngü oluşturur ve tarayıcıyı çöker. "? P = 2" gibi basit bir şeyle deneyin
MrColes

@MrColes: Eyvah. Bunu yazmayalı epey oldu. O zamandan beri, Webkit'in, değişmez olarak kullanıldığında RegExp nesnesinin dahili konum sayacını güncellemediğini keşfettim. Cevabımı düzeltmeyle güncelleyeceğim.
Ateş Goral


6

neden eski güzel PHP kullanmıyorsunuz? örneğin, bir GET parametresi 'target' aldığımızı varsayalım:

function getTarget() {
    var targetParam = "<?php  echo $_GET['target'];  ?>";
    //alert(targetParam);
}

7
Çünkü bu sunucu tarafı bir çözüm ve soru istemci tarafı / javascript / jQuery tarafı ile ilgiliydi.
Hrvoje Kusulja

@hkusulja yaralanmaya hakaret ekliyor: onaylasanız bile, sorunun yalnızca sunucu tarafı olduğunu göremiyorum. bir alet kadar kalın hissediyorum ...
tony gil

1
Bu senaryo iğrenç. Sitenizin saldırıya uğramasını istiyorsanız bunu kullanın. Her zaman kullanıcı tarafından girilen değişkenlerden kaçın !! $ _GET'i doğrudan VERMEYİN.
charj


3

Herhangi bir sunucu tarafı dili ile, POST değişkenlerini javascript'e göndermeniz gerekecektir.

.AĞ

var my_post_variable = '<%= Request("post_variable") %>';

Sadece boş değerlere dikkat edin. Yayınlamaya çalıştığınız değişken gerçekten boşsa, bir javascript sözdizimi hatası alırsınız. Bunun bir dize olduğunu biliyorsanız, tırnak içine almanız gerekir. Tam sayı ise, satırı javascript'e yazmadan önce gerçekten var olup olmadığını test etmek isteyebilirsiniz.


1
Yine de her zaman sunucu tarafındaki dillere erişiminiz olmaz. Örneğin GitHub sayfaları ...
Adam B


2

İşte GET, birkaç yıl boyunca optimize edilmiş bir rutin olan global bir nesnede tüm değişkenleri bir araya getirecek bir şey . JQuery'nin yükselişinden bu yana, bunları jQuery'nin kendisinde saklamak artık uygun görünüyor, John ile olası bir çekirdek uygulamayı kontrol ediyorum.

jQuery.extend({
    'Q' : window.location.search.length <= 1 ? {}
        : function(a){
            var i = a.length, 
                r = /%25/g,  // Ensure '%' is properly represented 
                h = {};      // (Safari auto-encodes '%', Firefox 1.5 does not)
            while(i--) {
                var p = a[i].split('=');
                h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
            }
            return h;
        }(window.location.search.substr(1).split('&'))
});

Örnek kullanım:

switch ($.Q.event) {
    case 'new' :
        // http://www.site.com/?event=new
        $('#NewItemButton').trigger('click');
        break;
    default :
}

Bu yardımcı olur umarım. ;)



1

$ _GET'iniz çok boyutluysa, istediğiniz şey bu olabilir:

var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
            return decodeURIComponent(s.split("+").join(" "));
    }

    //handling for multidimensional arrays
    if(decode(arguments[1]).indexOf("[]") > 0){
        var newName = decode(arguments[1]).substring(0, decode(arguments[1]).length - 2);
        if(typeof $_GET[newName] == 'undefined'){
            $_GET[newName] = new Array();
        }
        $_GET[newName].push(decode(arguments[2]));
    }else{
        $_GET[decode(arguments[1])] = decode(arguments[2]);
    }
});

1

basit, ancak yine de URL'den değişkenler / değerler almak için kullanışlıdır:

function getUrlVars() {
    var vars = [], hash, hashes = null;
    if (window.location.href.indexOf("?") && window.location.href.indexOf("&")) {
        hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    } else if (window.location.href.indexOf("?")) {
        hashes = window.location.href.slice(window.location.href.indexOf('?') + 1);
    }
    if (hashes != null) {
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars[hash[0]] = hash[1];
        }
    }
    return vars;
}

İnternette bir yerde buldum, sadece birkaç hatayı düzelttim


1

Aşağıdaki işlevi kullanın:

var splitUrl = function() {
    var vars = [], hash;
    var url = document.URL.split('?')[0];
    var p = document.URL.split('?')[1];
    if(p != undefined){
        p = p.split('&');
        for(var i = 0; i < p.length; i++){
            hash = p[i].split('=');
            vars.push(hash[1]);
            vars[hash[0]] = hash[1];
        }
    }
    vars['url'] = url;
    return vars;
};

ve değişkenlere , get değişkeninin adı vars['index']olduğu gibi erişin 'index'.


Bu kod gibi UTL'ler için başarısız olur http://foo.com/?a=b#bar. Bunun b#bariçin değer olduğunu düşünüyor a.
MM

1

Basit tutun

Değerini almak için VARIABLE_KEY'i değişkenin anahtarıyla değiştirin

 var get_value = window.location.href.match(/(?<=VARIABLE_KEY=)(.*?)[^&]+/)[0]; 

0

Sadece kayıt için, bu sorunun cevabını bilmek istedim, bu yüzden bir PHP yöntemi kullandım:

<script>
var jGets = new Array ();
<?
if(isset($_GET)) {
    foreach($_GET as $key => $val)
        echo "jGets[\"$key\"]=\"$val\";\n";
}
?>
</script>

Bu şekilde, bundan sonra çalışan tüm javascript / jquery'im jGets'teki her şeye erişebilir. Hissettiğim güzel ve zarif bir çözüm.


0

Benim yaklaşımım:

var urlParams;
(window.onpopstate = function () {
var match,
      pl     = /\+/g,  Regex for replacing addition symbol with a space
       search = /([^&=]+)=?([^&]*)/g,
      decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
       query  = window.location.search.substring(1);
   urlParams = {};
   while (match = search.exec(query))
    urlParams[decode(match[1])] = decode(match[2]);
})();
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.