Comment obtenir les variables GET et POST avec JQuery?

Comment puis-je obtenir les valeurs GET et POST avec JQuery?

Ce que je veux faire, c'est quelque chose comme ça:

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

Pour les paramètres GET, vous pouvez les saisir à partir de 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"]); 

Pour les paramètres POST, vous pouvez sérialiser l'objet $_POST en format JSON dans une <script> :

 <script type="text/javascript"> var $_POST = <?php echo json_encode($_POST); ?>; document.write($_POST["test"]); </script> 

Pendant que vous êtes là (en faisant les choses sur le côté serveur), vous pouvez également collecter les paramètres GET sur PHP:

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

Remarque: Vous aurez besoin de la version PHP 5 ou supérieure pour utiliser la fonction json_encode intégrée.


Mise à jour: Voici une implémentation plus générique:

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

Il y a un plugin pour que jQuery obtienne les params GET appelés .getUrlParams

Pour POST, la seule solution fait écho au POST dans une variable javascript utilisant PHP, comme l'a suggéré Moran.

Pourquoi ne pas utiliser un bon vieux PHP? Par exemple, disons que nous recevons un paramètre GET 'cible':

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

Ou vous pouvez utiliser ce http://plugins.jquery.com/project/parseQuery , il est plus petit que la plupart (minifié 449 octets), renvoie un objet représentant les paires nom-valeur.

Avec n'importe quelle langue côté serveur, vous devrez émettre les variables POST en javascript.

.NET

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

Il suffit de faire attention aux valeurs vides. Si la variable que vous essayez d'émettre est en fait vide, vous obtiendrez une erreur de syntaxe javascript. Si vous savez que c'est une chaîne, vous devez l'envelopper entre guillemets. Si c'est un nombre entier, vous pouvez tester pour voir s'il existe réellement avant d'écrire la ligne vers javascript.

Vous pouvez essayer le plugin Query String Object pour jQuery.

Voici quelque chose pour rassembler toutes les variables GET dans un objet global, une routine optimisée sur plusieurs années. Depuis la montée de jQuery, il semble maintenant approprié de les stocker dans jQuery lui-même, je vérifie avec John une implémentation de base potentielle.

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

Exemple d'utilisation:

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

J'espère que cela t'aides. 😉

Les plugins de jQuery semblent sympas, mais ce dont j'avais besoin, c'est une fonction js rapide pour analyser les paramètres de démarrage. Voici ce que j'ai trouvé.

http://www.bloggingdeveloper.com/post/JavaScript-QueryString-ParseGet-QueryString-with-Client-Side-JavaScript.aspx

Si votre $ _GET est multidimensionnel, cela pourrait être ce que vous voulez:

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

Simple mais utile pour obtenir des valeurs / valeurs de l'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; } 

Je l'ai trouvé quelque part sur Internet, j'ai juste corrigé quelques bogues

Utilisez la fonction suivante:

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

Et les variables d'accès comme vars['index']'index' est le nom de la variable get.

Juste pour mémoire, je voulais connaître la réponse à cette question, alors j'ai utilisé une méthode PHP:

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

De cette façon, tout mon javascript / jquery qui s'exécute après cela peut accéder à tout dans les jGets. C'est une solution agréable et élégante que je ressens.

Ma démarche:

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