Ir para conteúdo

POWERED BY:

Arquivado

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

maginot

[Resolvido] Como fazer para enviar os dados

Recommended Posts

Bom dia galera.

 

SEguinte, estou desenvolvendo uma aplicação em PHP e Ajax. Na opção de pesquisa eu coloquei acima um campo filtro, que serve justamente para filtrar a pesquisa executada. Porém para tornar o negócio o mais dinâmico possível, ao digitar ele já vai filtrando os resultados. (utilizei um onkeyup que chama minha função ajax que carregar os dados no innetHTML da div).

 

O problema é que isso as vezes deixa lento a pesquisa, por isso cheguei a conclusão que seria mais interessante que os dados enviados pelo ajax só ocorresse após 1 ou 2 segundos de inatividade do teclado... hoje quando se quer filtrar um codigo, 9090 por exemplo, ao digitar o 9 ele já envia os dados e carrega, mas quanto menos digitos maior é o resultado o que deixa mais lento, porém quando se quer um codigo inteiro normalmente se digita rapidamente e não tem muito espaço entre o tempo de digitação de cada letra. Se colocasse 1 segundo de delay para chamar a função o sistema ficaria mais rápido.

 

A questão é que não sei como fazer com javascript para ele perceber que o usuário está X tempo sem digitar... gostaria de ajuda com essa função...

 

 

valeu

[ ]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao digitar (keyup) você seta um tempo:

 

var tempo = setTimeout(...);

O negócio começa agora. Quando a pessoa digitar a próximo, você tem que cancelar esse e setar outro:

var tempo;

if(typeof(tempo)=='Number'){
  clearTimeout(tempo);
}else{
  tempo = setTimeout(...,2000);
}

 

Se não souber usar o setTimeout veja na documentação da Mozilla. http://developer.mozilla.org

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao digitar (keyup) você seta um tempo:

 

var tempo = setTimeout(...);

O negócio começa agora. Quando a pessoa digitar a próximo, você tem que cancelar esse e setar outro:

var tempo;

if(typeof(tempo)=='Number'){
  clearTimeout(tempo);
}else{
  tempo = setTimeout(...,2000);
}

 

Se não souber usar o setTimeout veja na documentação da Mozilla. http://developer.mozilla.org

Hmm desculpa a ignorancia... mas não creio que tenha funcionado como eu esperava.

 

 

no onkeyup ficou: onkeyup="exec_delay()"

 

no arquivo java.js ficou:

 

function lista_consulta()
{
	return xajax_consultaCompleta(xajax.getFormValues('consultacompleta'));
}

function exec_delay()
{
	var tempo = setTimeout(lista_consulta, 2000);
	
	if(typeof(tempo)=='Number')
	{
		clearTimeout(tempo);
	}
	else
	{
		setTimeout(lista_consulta ,2000);
	}
}

apesar que percebi que existe um delay para a pesquisa, quando vejo no firebug para que são feitas varias requisicoes. Ao digitar 99999 no campo o firebug me mostra 10 requisicoes post... o que antes do timeout seriam 5 (1 para cada digito) ... acho q no final está ficando uma falsa ideia de velocidade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Altera a sua funcao exec_delay para algo como:

function exec_delay()
{
if(!window.tempo)
{
	window.tempo = setTimeout(lista_consulta, 2000);
}
else
{
   clearTimeout(window.tempo);
   window.tempo = null;
}
}

[só uma sugestao]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu velho, funcionou perfeitamente.

O delay funciona e no final dos 2 segundos há apenas 1 requisição.

 

 

 

Thanks!

=)

 

Editado: Percebi que se eu digitar 9999 ele faz o query, se eu digitar algo denovo ele nao vai, se eu digitar depois ele vai, ou seja.. digita vai no proximo nao vai, depois vai e assim vai indo alternando ... mas ta o mais proximo da funcionalidade que preciso =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque na sua função lista_consulta o seguinte:

 

clearTimeout(window.tempo);

window.tempo = null;

 

 

Deve funcionar

 

 

 

Edit:

 

Eu colocaria a função exec_delay assim:

 

function exec_delay()
{
if(!window.tempo)
{
	window.tempo = setTimeout(lista_consulta, 2000);
}
else
{
   clearTimeout(window.tempo);
   window.tempo = null;
   window.tempo = setTimeout(lista_consulta, 2000);
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu!

 

Adicionando aquela ultima linha resolveu o problema, agora funciona 100%, perfeito... vai entrar pra biblioteca de funções =D

 

 

Obrigado a todos, abs!

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.