Como ler dados GET de um URL usando JavaScript?

Estou tentando passar dados de uma página para outra.

www.mints.com?name=something

Como ler o name usando JavaScript?

 function parseURLParams(url) { var queryStart = url.indexOf("?") + 1, queryEnd = url.indexOf("#") + 1 || url.length + 1, query = url.slice(queryStart, queryEnd - 1), pairs = query.replace(/\+/g, " ").split("&"), parms = {}, i, n, v, nv; if (query === url || query === "") return; for (i = 0; i < pairs.length; i++) { nv = pairs[i].split("=", 2); n = decodeURIComponent(nv[0]); v = decodeURIComponent(nv[1]); if (!parms.hasOwnProperty(n)) parms[n] = []; parms[n].push(nv.length === 2 ? v : null); } return parms; } 

Use da seguinte maneira:

 var urlString = "http://www.foo.com/bar?a=a+a&b%20b=b&c=1&c=2&d#hash"; urlParams = parseURLParams(urlString); 

que retorna um object como este:

 { "a" : ["aa"], /* param values are always returned as arrays */ "bb": ["b"], /* param names can have special chars as well */ "c" : ["1", "2"] /* an URL param can occur multiple times! */ "d" : [null] /* parameters without values are set to null */ } 

assim

 parseURLParams("www.mints.com?name=something") 

 {name: ["something"]} 

EDIT : A versão original desta resposta usou uma abordagem baseada em regex para análise de URL. Usou uma function mais curta, mas a abordagem foi falha e eu substituí-lo com um parser adequado.

Eu acho que isso também deveria funcionar:

 function $_GET(q,s) { s = (s) ? s : window.location.search; var re = new RegExp('&'+q+'=([^&]*)','i'); return (s=s.replace(/^\?/,'&').match(re)) ?s=s[1] :s=''; } 

Apenas chame assim:

 var value = $_GET('myvariable'); 

location.search https://developer.mozilla.org/en/DOM/window.location

embora a maioria use algum tipo de rotina de análise para ler parâmetros de string de consulta.

aqui está um http://safalra.com/web-design/javascript/parsing-query-strings/

Aqui está uma solução. Obviamente, essa function não precisa ser carregada em uma opção “window.params” – que pode ser personalizada.

 window.params = function(){ var params = {}; var param_array = window.location.href.split('?')[1].split('&'); for(var i in param_array){ x = param_array[i].split('='); params[x[0]] = x[1]; } return params; }(); 

Exemplo de chamada da API em http://www.mints.com/myurl.html?name=something&goal=true :

 if(window.params.name == 'something') doStuff(); else if( window.params.goal == 'true') shoutGOOOOOAAALLL(); 

Iv’e corrigiu / melhorou a resposta de Tomalak com:

  • Faça um Array somente se necessário.
  • Se houver outro símbolo de equação no valor que ele recebe dentro do valor
  • Agora, ele usa o valor location.search vez de um URL.
  • A string de pesquisa vazia resulta em um object vazio.

Código:

 function getSearchObject() { if (location.search === "") return {}; var o = {}, nvPairs = location.search.substr(1).replace(/\+/g, " ").split("&"); nvPairs.forEach( function (pair) { var e = pair.indexOf('='); var n = decodeURIComponent(e < 0 ? pair : pair.substr(0,e)), v = (e < 0 || e + 1 == pair.length) ? null : decodeURIComponent(pair.substr(e + 1,pair.length - e)); if (!(n in o)) o[n] = v; else if (o[n] instanceof Array) o[n].push(v); else o[n] = [o[n] , v]; }); return o; } 

A resposta atualmente selecionada não funcionou bem no meu caso, o que eu acho bastante típico. Eu encontrei a function abaixo aqui e funciona muito bem!

 function getAllUrlParams(url) { // get query string from url (optional) or window var queryString = url ? url.split('?')[1] : window.location.search.slice(1); // we'll store the parameters here var obj = {}; // if query string exists if (queryString) { // stuff after # is not part of query string, so get rid of it queryString = queryString.split('#')[0]; // split our query string into its component parts var arr = queryString.split('&'); for (var i=0; i 

Eu também fiz uma function bastante simples. Você chama por: get (“yourgetname”);

e obter o que havia. (agora que eu escrevi eu notei que ele vai te dar% 26 se você tivesse um & em seu valor ..)

 function get(name){ var url = window.location.search; var num = url.search(name); var namel = name.length; var frontlength = namel+num+1; //length of everything before the value var front = url.substring(0, frontlength); url = url.replace(front, ""); num = url.search("&"); if(num>=0) return url.substr(0,num); if(num<0) return url; }