Come faccio a analizzare i parametri di query URL, in Javascript?

Possibile duplicazione:
Utilizza il get paramater dell'URL nel javascript
Ottieni i valori della string di query in JavaScript

In Javascript, come posso get i parametri di una string URL (non l'URL corrente)?

piace:

www.domain.com/?v=123&p=hello 

Posso get "v" e "p" in un object JSON?

Oggi (2,5 anni dopo questa risposta) è ansible utilizzare in modo sicuro Array.forEach . Come suggerisce @ricosrealm, in questa function è stato utilizzato il decodeURIComponent .

 function getJsonFromUrl() { var query = location.search.substr(1); var result = {}; query.split("&").forEach(function(part) { var item = part.split("="); result[item[0]] = decodeURIComponent(item[1]); }); return result; } 

in realtà non è così semplice , vedere la revisione peer nei commenti, in particolare:

  • routing basato su hash (@cmfolio)
  • parametri arrays (@ user2368055)
  • l'uso corretto di decodeURIComponent (@AndrewF)

Forse questo dovrebbe andare a codereview SE, ma qui è più sicuro e codice senza regexp:

 function getJsonFromUrl(hashBased) { var query; if(hashBased) { var pos = location.href.indexOf("?"); if(pos==-1) return []; query = location.href.substr(pos+1); } else { query = location.search.substr(1); } var result = {}; query.split("&").forEach(function(part) { if(!part) return; part = part.split("+").join(" "); // replace every + with space, regexp-free version var eq = part.indexOf("="); var key = eq>-1 ? part.substr(0,eq) : part; var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : ""; var from = key.indexOf("["); if(from==-1) result[decodeURIComponent(key)] = val; else { var to = key.indexOf("]",from); var index = decodeURIComponent(key.substring(from+1,to)); key = decodeURIComponent(key.substring(0,from)); if(!result[key]) result[key] = []; if(!index) result[key].push(val); else result[key][index] = val; } }); return result; } 

Ho anche sostituito lo spazio + non codificato per lo spazio secondo questo articolo che è anche utile come codificare l'adesione a RFC 3986.

Nota il result[key][index] = val : viene creata una nuova voce di arrays, è enumerabile, in modo che possa essere iterata da forEach chiamata. Pertanto, è ansible analizzare anche URL come

 ?foo%20e[]=a%20a&foo+e[%5Bx%5D]=b&foo%20e[]=c // {"foo e": ["aa", "c", "[x]":"b"]} var obj = getJsonFromUrl()["foo e"]; for(var key in obj) { // Array.forEach would skip string keys here console.log(key,":",obj[key]); } /* 0 : aa 1 : c [x] : b */ 

Potresti get un object JavaScript (una mappa) dei parametri con qualcosa di simile:

 var regex = /[?&]([^=#]+)=([^&#]*)/g, url = window.location.href, params = {}, match; while(match = regex.exec(url)) { params[match[1]] = match[2]; } 

L'espressione regolare potrebbe essere probabilmente migliorata. Essa cerca semplicemente coppie di valore nominale, separate da = caratteri e si dividono separati da caratteri (o un carattere per il primo). Per il tuo esempio, i risultati sopra riportti potrebbero comportre:

{v: "123", p: "hello"}

Ecco un esempio di lavoro .

 var v = window.location.getParameter('v'); var p = window.location.getParameter('p'); 

ora v e p sono oggetti che hanno 123 e ciao in loro rispettivamente