Come ottengo semplicemente GETe POSTvalori con JQuery?
Quello che voglio fare è qualcosa del genere:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
Come ottengo semplicemente GETe POSTvalori con JQuery?
Quello che voglio fare è qualcosa del genere:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
Risposte:
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);
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.
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);
}
Oppure puoi usare questo http://plugins.jquery.com/project/parseQuery , è più piccolo della maggior parte (449 byte minimizzati), restituisce un oggetto che rappresenta coppie nome-valore.
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.
Puoi provare il plugin Query String Object per jQuery.
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. ;)
I plugin jQuery sembrano belli, ma quello di cui avevo bisogno è una rapida funzione js per analizzare i parametri get. Ecco cosa ho trovato.
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]);
}
});
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
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.
http://foo.com/?a=b#bar. Pensa che b#barsia il valore per a.
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.
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]);
})();