{"id":5331,"date":"2015-08-15T17:15:06","date_gmt":"2015-08-15T15:15:06","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=5331"},"modified":"2016-04-04T22:02:27","modified_gmt":"2016-04-04T20:02:27","slug":"recuperer-parametres-get-url-javascript","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/javascript\/recuperer-parametres-get-url-javascript","title":{"rendered":"R\u00e9cup\u00e9rer les param\u00e8tres GET d&rsquo;une URL avec JavaScript"},"content":{"rendered":"<p>Cela peut sembler b\u00eate, mais dans la m\u00eame semaine on m&rsquo;a pos\u00e9 deux fois cette question. Dans un langage serveur, r\u00e9cup\u00e9rer les param\u00e8tres d&rsquo;une URL est vraiment super facile. Mais JS ne pr\u00e9voit pas nativement cette possibilit\u00e9, je vous propose donc une petite fonction pour le faire, mais il existe certainement d&rsquo;autres techniques.<!--more--><\/p>\n<h2>L&rsquo;exemple de PHP<\/h2>\n<p>Lorsque des param\u00e8tres sont dans l&rsquo;URL, PHP permet de les r\u00e9cup\u00e9rer assez facilement.<br \/>\nExemple avec l&rsquo;URL : <code>http:\/\/mondomaine.tld\/?name=geoffrey<\/code><\/p>\n<pre class=\"code\"><code class=\"language-php\">&lt;?php\r\n\techo $_GET['name']; \/\/ affiche 'geoffrey'\r\n?&gt;<\/code><\/pre>\n<p>Lorsque plusieurs param\u00e8tres se succ\u00e8dent, on a quelque chose comme \u00e7a.<br \/>\n<code>http:\/\/mondomaine.tld\/?name=geoffrey&amp;age=42<\/code><\/p>\n<pre class=\"code\"><code class=\"language-php\">&lt;?php\r\n\techo $_GET['name']; \/\/ affiche 'geoffrey'\r\n\techo $_GET['age']; \/\/ affiche '42'\r\n?&gt;<\/code><\/pre>\n<p>C&rsquo;est ce comportement que nous allons copier.<\/p>\n<h2>La m\u00e9thode avec JavaScript<\/h2>\n<p>Je vais essayer de me rapprocher le plus possible des retours offerts par PHP. C&rsquo;est \u00e0 dire que si un param\u00e8tre dans l&rsquo;URL est d\u00e9clar\u00e9 une deuxi\u00e8me fois, je r\u00e9cup\u00e8re le dernier. La valeur est optionnelle (ce qui se trouve apr\u00e8s le \u00e9gal) et retournera une cha\u00eene vide.<\/p>\n<pre class=\"code\"><code class=\"language-javascript\">function $_GET(param) {\r\n\tvar vars = {};\r\n\twindow.location.href.replace( location.hash, '' ).replace( \r\n\t\t\/[?&amp;]+([^=&amp;]+)=?([^&amp;]*)?\/gi, \/\/ regexp\r\n\t\tfunction( m, key, value ) { \/\/ callback\r\n\t\t\tvars[key] = value !== undefined ? value : '';\r\n\t\t}\r\n\t);\r\n\r\n\tif ( param ) {\r\n\t\treturn vars[param] ? vars[param] : null;\t\r\n\t}\r\n\treturn vars;\r\n}<\/code><\/pre>\n<p>Avec cette fonction JavaScript, vous avez deux utilisations diff\u00e9rentes :<\/p>\n<pre class=\"code\"><code class=\"language-javascript\">var name = $_GET('name'),\r\n    age = $_GET('age');<\/code><\/pre>\n<p>ou, m\u00e9thode plus performante :<\/p>\n<pre class=\"code\"><code class=\"language-javascript\">var $_GET = $_GET(),\r\n    name = $_GET['name'],\r\n    age = $_GET['age'];<\/code><\/pre>\n<p>Bien s\u00fbr je me suis amus\u00e9 \u00e0 copier jusqu&rsquo;au nom <code>$_GET<\/code> pour montrer que c&rsquo;est possible. Mais pour des raisons de convention au sein d&rsquo;un projet, notamment dans le cadre de l&rsquo;utilisation de jQuery, il vous faudra certainement faire diff\u00e9remment. Il vous suffira alors de renommer toutes les occurences de <code>$_GET<\/code> en autre chose.<\/p>\n<p>Si jamais vous avez besoin de r\u00e9cup\u00e9rer des valeurs complexes qui serait encod\u00e9e dans l&rsquo;URL (exemple avec le param\u00e8tre <code>?test=Hello, World!<\/code>, utilisez la fonction <code>decodeURI()<\/code> ainsi :<\/p>\n<pre class=\"code\"><code class=\"language-javascript\">var deco_var = decodeURI( $_GET( 'test' ) );<\/code><\/pre>\n<p>\u00c0 vous de jouer maintenant !<\/p>\n<h2>Autres m\u00e9thodes<\/h2>\n<p>Apr\u00e8s des \u00e9changes sur Twitter voici deux autres pistes pour arriver au m\u00eame but :<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.mozilla.org\/fr\/docs\/Web\/API\/window\/location#Exemple_6_.3A_Placer_les_valeurs_obtenues_par_window.location.search_dans_un_objet_nomm.C3.A9_oParametres\">window.location.search<\/a> qui permet d&rsquo;acc\u00e9der directement \u00e0 tout ce qui se trouve apr\u00e8s le \u00ab\u00a0?\u00a0\u00bb dans l&rsquo;URL.<br \/>\nMerci \u00e0 <a href=\"https:\/\/twitter.com\/nhoizey\">Nicolas Hoizey<\/a> pour l&rsquo;info.<\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/URLSearchParams\">URLSearchParams<\/a> qui poss\u00e8de ses propres m\u00e9thodes (get(), getAll(), etc.) mais qui est encore tr\u00e8s exp\u00e9rimentale \u00e0 l&rsquo;heure o\u00f9 j&rsquo;\u00e9cris ces lignes.<br \/>\nMerci \u00e0 <a href=\"https:\/\/twitter.com\/7studio\">Xavier Zalawa<\/a> pour l&rsquo;info.<\/li>\n<\/ul>\n<div class=\"sources\">\n<h2>Sources et liens utiles<\/h2>\n<ul>\n<li><a href=\"http:\/\/papermashup.com\/read-url-get-variables-withjavascript\/\">Papermashup<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/5448545\/how-to-retrieve-get-parameters-from-javascript\">Stackoverflow<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Cela peut sembler b\u00eate, mais dans la m\u00eame semaine on m&rsquo;a pos\u00e9 deux fois cette question. Dans un langage serveur, r\u00e9cup\u00e9rer les param\u00e8tres d&rsquo;une URL est vraiment super facile. Mais JS ne pr\u00e9voit pas nativement cette possibilit\u00e9, je vous propose donc une petite fonction pour le faire, mais il existe certainement d&rsquo;autres techniques.<\/p>\n","protected":false},"author":4,"featured_media":5353,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[610],"tags":[228,125,577],"coauthors":[597],"class_list":["post-5331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-astuce","tag-javascript","tag-vanilla"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/5331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=5331"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/5331\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/5353"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=5331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=5331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=5331"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=5331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}