terça-feira, 16 de abril de 2002

Lendo QueryString no client

Esses dias um colega numa lista de discussão me perguntou se tem como ler em uma página os valores submetidos por um formulário em outra sem usar ASP, PHP ou qualquer outra linguagem de servidor. Eu pensei em uma porção de sugestões, com cookies por exemplo. Ele perguntou então se era possível ler Query Strings (aquele texto no endereço da página depois do ?). Então lá vai:


Pra começar, é importante saber que a Query String é gerada pelo browser quando o formulário é submetido com método GET. Você também pode digitar uma Query String diretamente na barra de endereços ou requisitá-la através de um link (isso não vai funcionar se o arquivo estiver em sua máquina, apenas se estiver num servidor web. Portanto, para testar na sua máquina, você vai ter que criar um formulário).


A Query String vem depois do endereço da página, no seguinte formato:



?primeiravariavel=dados&segundavariavel=dados&terceiravariavel=dados


Sendo que os dados estão codificados (se você usa ASP, pode codificar os dados com Server.URLEncode)


Vamos ao script, você coloca isso no começo das páginas:

<script>
qs=new Array()
variaveis=location.search.replace(/\x3F/,"").replace(/\x2B/g," ").split("&")
if(variaveis!=""){
for(i=
0;i<variaveis.length;i++){nvar=variaveis[i].split("=")
qs[nvar[0]]=unescape(nvar[1])
}
}
function QueryString(variavel){
return qs[variavel]
}
</script>

E, em qualquer lugar do documento, você pode ler um valor da Query String com:


 

nome=QueryString("nome")

E é só isso.




Quer dar uma olhadinha passo-a-passo? Olha aí:

<script>
/*
Cria um novo Array vazio:
*/
qs=new Array()

/*
A propriedade search do objeto location é o que vem depois do
"?" no endereço da página (incluindo o "?").
Esse primeiro replace(/\x3F/,"") elimina esse "?" inicial.
Um espaço em Query String é substituído por um sinal de mais (+).
Curiosamente, a função unescape não reverte o sinal em espaço.
Por isso esse segundo replace(/\x2B/g," "), que substitui os
sinais de mais por espaços.
E o último split separa cada variável da Query String num Array.
*/
variaveis=location.search.replace(/\x3F/,"").replace(/\x2B/g," ").split("&")

/*
Esse bloco varre o Array, separando (split("=")) o nome da
variável do valor. A função unescape descodifica o valor (pra
codificar use escape). Os valores vão pro Array qs.
*/
if(variaveis!=""){
for(i=0;i<variaveis.length;i++){
nvar=variaveis[i].split("=")
qs[nvar[0]]=unescape(nvar[1])
}
}

/*
Essa função é só umaponte pro Array qs.
Preferi deixar os resultados acessíveis por uma função por dois
motivos:
1. Os valores ficam acessíveis também por VBScript
2. É mais bonito de escrever
*/




function QueryString(variavel){
return qs[variavel]
}
</script>
Boa sorte!


Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

0 comentários: