Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabianoSouza

Procurar valor dentro de array

Recommended Posts

Codigo para identificar os cookies.

 

Preciso que abra um alert caso exista um cookie com determinando nome.

Estou tentando isso. Mas sem sucesso (o cookie "conta" existe!)

function ReadCookie()
{
   var allcookies = document.cookie;

   cookiearray  = allcookies.split(';');

   var nome = "";
   for(var i=0; i<cookiearray.length; i++){
      nome = cookiearray[i].split('=')[0];
        if (nome[i]== "conta"){
	 alert(nome)

        }
   }

}

O cod recupera os cookies, separa e varre pegando apenas o nome.

Depois, dentro de loop, identifica se o nome encontrado é igual a "conta".

Se sim, abre alert.

 

Isso não está funfando.

Onde está o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, era exatamente isso!

Mas agora percebi que não esta fazendo exatamente o que planejei.

 

O trecho

nome = cookiearray[i].split('=')[0];
        if (nome == "conta"){
  alert(nome)

Serve para dizer qual cookie que quero.

 

 

Mas isso só funciona se o cookie "conta" for o item 0 do array.

Como esta linha abaixo

nome = cookiearray[i].split('=')[0];

Ele pode mudar de posição no array, conforme a quantidade de cookies que tiver do meu site.

 

Como faço para saber da existência do cookie, independente da posição dele no array?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas isso só funciona se o cookie "conta" for o item 0 do array.

Como esta linha abaixo

nome = cookiearray[i].split('=')[0];

Ele pode mudar de posição no array, conforme a quantidade de cookies que tiver do meu site.

Tem certeza? Já testou com esse cookie em outra posição?

 

Esse [0] aí representa outra coisa: cada cookie está no formato nome=valor, ou seja, esse índice 0 será sempre o nome do cookie.

 

A lista de todos os cookies você criou aqui:

 

cookiearray  = allcookies.split(';');

 

Aí você separa por pont-e-vírgula, o que gera um array com todos os cookies, inclusive o conta, independente se ele é o primeiro ou o último.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, tem razão em relação a linha

nome = cookiearray[i].split('=')[0];

O loop lê o nome dos cookies.

 

 

 

Bom, veja o cod na íntegra.

function ReadCookie()
{
   var allcookies = document.cookie;

   // Get all the cookies pairs in an array
   cookiearray  = allcookies.split(';');

var meuArray = new Array;

   // Now take key value pair out of this array
   for(var i=0; i<cookiearray.length; i++){
      name = cookiearray[i].split(',');
//      value = cookiearray[i].split('=')[1];
meuArray.push(name);
   }
tamanhoArray = meuArray.length; 

for(var j=0; j<meuArray.length; j++){
var  NovoArray = meuArray[j].split('=')[0];

if (NovoArray == "saudacao");
{
alert("Achou cookie definido");
}
}
}

Mudei a estrutura de ontem para hoje (ainda está meio bagunçado...)

 

A variável NovoArray trás o nome do cookie.

Isso está funcionando corretamente.

 

O problema está na hora de comparar com If

Tipo "Se o nome do cookie for igual a "saudacao", faz isso, senão, faz aquilo.

 

Este if (que está dentro do segundo loop) não funciona, abre o alert independentemente do valor encontrado

na variável NovoArray.

if (NovoArray == "saudacao");
{
	alert("Achou cookie definido");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Em vez disso tudo, por que não faz assim

var existe = document.cookie.indexOf('campo=valor') !== -1;

Hmm estou testando sua sugestão. Parece bem prática.

 

Mas me deparei com um problema ao testar.

Se eu usar indexOf('a'), indexOf('e'), indexOf('i') retorna True. Pois certamente existem estas letras no nome dos cookies existentes.

 

Preciso que o codigo entenda este tipo de situação e diferencie. Preciso pegar o nome exato, creio que trabalhando com array consiga satisfazer essa condição.

 

Brigado!

 

Em vez disso tudo, por que não faz assim

var existe = document.cookie.indexOf('campo=valor') !== -1;

 

 

 

Olha o ponto-e-vírgula sobrando no fim da linha do if :P

Ah, removi. Vacilei..

 

Mas continua o problema: só abre o alert se o cookie que quero for o primeiro item lido.

Pedi comparar usando o cookie saudacao, que é o terceiro ou quarto cookie do array. Aí não funfa.

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é da array, tem de pegar o valor de document.cookie que vai retornar uma string.

 

você também tem de comparar nome=valor ao mesmo tempo, caso contrario pode dar problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eita, então pera aí. Deixa eu dar um passo para atrás.

Vou tratar da estrutura de cookies pq acho que estou sem entender bem isso.

 

Segundo pesquisa, a estrutura de cookie é essa

"key1=value1;key2=value2;";

Mas vi também (e criei alguns cookies) com essa estrutura

"meu_cookie=key1=value1;meu_cookie=key2=value2;";

Exemplo:

conta=meu_email=emaiil@email.com.br;

conta=meu_apelido=fabiano

Ou seja, duas informações (email e apelido) no cookie chamado "conta".

 

Usando o document.cookie; aparecem cookies com as duas estruturas.

 

É certa essa segunda forma??

Valew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algo de errado ai, não existem dois iguais como você fez ai, é uma chave um um valor.

 

Para ter um outro igual no valor, é necessário codificar esse outro igual

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma observação quanto à sugestão do ExtremsX sobre o indexOf: essa função será útil se você souber exatamente o nome e o valor do cookie. O nome será sempre o mesmo, mas, se o valor mudar, o indexOf vai retornar -1 :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, pensei ter lido que ele procurava por um chave=valor, mas ele pode procurar por chave= que já serve. Ou até mesmo usar Regex

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algo de errado ai, não existem dois iguais como você fez ai, é uma chave um um valor.

 

Para ter um outro igual no valor, é necessário codificar esse outro igual

 

Ah, eu não qui dizer ter dois cookies com o mesmo nome.

Quis dizer se está correto um cookie ter duas ou mais chaves (cada uma com seus respectivos valores).

Fiz duas vezes (com o mesmo nome) apenas para ilustrar essa possibilidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.