come ottenere le variabili GET e POST con JQuery?


96

Come ottengo semplicemente GETe POSTvalori con JQuery?

Quello che voglio fare è qualcosa del genere:

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

Risposte:


171

Per i parametri GET, puoi prenderli da 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"]);

Per i parametri POST, puoi serializzare l' $_POSToggetto in formato JSON in un <script>tag:

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

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

Mentre ci sei (facendo cose sul lato server), potresti raccogliere anche i parametri GET su PHP:

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

Nota: avrai bisogno della versione 5 o successiva di PHP per utilizzare la json_encodefunzione integrata.


Aggiornamento: ecco un'implementazione più generica:

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
Il tuo metodo di estrazione non considera gli argomenti senza valore (”? Foo & bar = baz“ => {foo: "", bar: "baz"}).
Gumbo

1
Bella cattura Gumbo! Il = nella regex dovrebbe essere reso opzionale: ... snip ... (?: = ([^ &] *))? &?) / G
Ates Goral,

1. Il tuo primo esempio GET non sembra funzionare per me. 2. Nell'aggiornamento, il nome della funzione contiene un errore di battitura
Jake Wilson

Hai provato a eseguirlo in Safari o Chrome? Crea un ciclo infinito e blocca il browser. Provalo con qualcosa di semplice come "? P = 2"
MrColes

@MrColes: Yikes. È passato un po 'di tempo da quando ho scritto questo. Da allora, ho scoperto che Webkit non aggiorna il contatore di posizione interno dell'oggetto RegExp quando viene utilizzato come valore letterale. Aggiornerò la mia risposta con la correzione.
Ates Goral

16

C'è un plugin per jQuery per ottenere i parametri GET chiamato .getUrlParams

Per POST l'unica soluzione è fare eco al POST in una variabile javascript usando PHP, come suggerito da Moran.


6

perché non usare il buon vecchio PHP? ad esempio, supponiamo di ricevere un parametro GET "target":

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

7
Perché questa è una soluzione lato server e la domanda riguardava il lato client / lato javascript / jQuery.
Hrvoje Kusulja

@hkusulja aggiunge la beffa al danno: anche se lo affermi, non vedo ancora che la domanda sia esclusivamente lato server. mi sento grosso come uno strumento ...
tony gil

1
Questo script è orribile. Usalo se vuoi che il tuo sito venga violato. Esci sempre dalle variabili inserite dall'utente !! NON restituire $ _GET direttamente.
charj


3

Con qualsiasi linguaggio lato server, dovrai emettere le variabili POST in javascript.

.NETTO

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

Fai solo attenzione ai valori vuoti. Se la variabile che si tenta di emettere è effettivamente vuota, verrà visualizzato un errore di sintassi javascript. Se sai che è una stringa, dovresti racchiuderla tra virgolette. Se è un numero intero, potresti voler verificare se esiste effettivamente prima di scrivere la riga in javascript.


1
Tuttavia, non hai sempre accesso alle lingue lato server. Ad esempio le pagine di GitHub ...
Adam B


2

Ecco qualcosa per raccogliere tutte le GETvariabili in un oggetto globale, una routine ottimizzata per diversi anni. Dall'avvento di jQuery, ora sembra appropriato memorizzarli in jQuery stesso, sto verificando con John una potenziale implementazione di base.

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('&'))
});

Utilizzo di esempio:

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

Spero che questo ti aiuti. ;)



1

Se il tuo $ _GET è multidimensionale, questo potrebbe essere ciò che desideri:

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

semplice, ma ancora utile per ottenere variabili / valori dall'URL:

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;
}

L'ho trovato da qualche parte su Internet, ho risolto solo alcuni bug


1

Usa la seguente funzione:

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;
};

e accedere alle variabili come vars['index']dove 'index'è il nome della variabile get.


Questo codice fallisce per UTL come http://foo.com/?a=b#bar. Pensa che b#barsia il valore per a.
MM

1

Sii semplice

sostituire VARIABLE_KEY con la chiave della variabile per ottenere il suo valore

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

0

Solo per la cronaca, volevo sapere la risposta a questa domanda, quindi ho usato un metodo PHP:

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

In questo modo tutto il mio javascript / jquery che viene eseguito dopo questo può accedere a tutto in jGets. È una soluzione bella ed elegante, credo.


0

Il mio approccio:

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]);
})();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.