como obter variables ​​GET e POST com JQuery?

Como faço para obter valores GET e POST com o JQuery?

O que eu quero fazer é algo assim:

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

Para os parâmetros GET, você pode pegá-los em 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"]); 

Para parâmetros POST, é possível serializar o object $_POST no formato JSON para uma tag :

  

Enquanto você está nisso (fazendo coisas no lado do servidor), você pode coletar os parâmetros GET no PHP também:

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

Nota: Você precisará do PHP versão 5 ou superior para usar a function json_encode integrada.


Atualização: aqui está uma implementação mais genérica:

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

Existe um plugin para o jQuery para obter os parâmetros GET chamados .getUrlParams

Para o POST, a única solução é ecoar o POST em uma variável javascript usando PHP, como Moran sugeriu.

por que não usar o bom e velho PHP? Por exemplo, digamos que recebamos um parâmetro GET ‘target’:

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

Ou você pode usar este http://plugins.jquery.com/project/parseQuery , é menor que a maioria (com 449 bytes), retorna um object que representa pares nome-valor.

Com qualquer linguagem do lado do servidor, você terá que emitir as variables ​​POST em javascript.

.LÍQUIDO

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

Apenas tenha cuidado com valores vazios. Se a variável que você tentar emitir estiver realmente vazia, você receberá um erro de syntax de javascript. Se você sabe que é uma string, você deve colocá-la entre aspas. Se é um inteiro, você pode querer testar para ver se ele realmente existe antes de escrever a linha para javascript.

Você pode tentar o plugin Query String Object para jQuery.

Aqui está algo para reunir todas as variables GET em um object global, uma rotina otimizada ao longo de vários anos. Desde o surgimento do jQuery, agora parece apropriado armazená-los no próprio jQuery, estou checando com John sobre uma possível implementação do núcleo.

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

Exemplo de uso:

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

Espero que isto ajude. 😉

Os plugins do jQuery parecem bons, mas o que eu preciso é de uma function js rápida para analisar os parâmetros do get. Aqui está o que eu encontrei.

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

Se seu $ _GET é multidimensional, isso pode ser o que você está querendo:

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

simples, mas ainda assim útil para obter vars / valores de 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; } 

Eu encontrei em algum lugar na internet, apenas consertei alguns bugs

Use a seguinte function:

 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 acessar variables ​​como vars['index'] onde 'index' é o nome da variável get.

Apenas para o registro, eu queria saber a resposta para esta pergunta, então eu usei um método PHP:

  

Dessa forma, todo o meu javascript / jquery que corre depois disso pode acessar tudo no jGets. É uma ótima solução elegante que eu sinto.

Minha abordagem:

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

Mantenha simples

substitua VARIABLE_KEY pela chave da variável para obter seu valor

  var get_value = window.location.href.match(/(?< =VARIABLE_KEY=)(.*?)[^&]+/)[0];