Ir para conteúdo

POWERED BY:

Arquivado

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

Raffael Chacon

[Resolvido] Atualizar Gráfico

Recommended Posts

Pessoal estou com um problema, vou tentar explicar para ver se alguem pode me ajudar, é o seguinte:

Eu tenho um gráfico em colunas, feito em flash, que recebe dados do BD atravéz de um PHP utilizando XML. Esse gráfico está em uma pagina PHP que contém os campos para se entrar com novos valores e então alimentar o BD para que o gráfico seja atualizado. Até ai tudo beleza, o meu problema é na hora de atualizar a gráfico. Ele só recebe os novos valores se eu fechar e abrir a pagina toda. Isso é, não adianta F5, atualizar, digitar de novo...só fechando e abrindo novamente. Queria algum comando ou modo para que o gráfico fosse atualizado quando se entra com dados ou pelo menos de tempo em tempo.

Seguem os códigos:

Flash(Apenas para uma coluna, pois cada uma fica em um symbol difente para que se movam separadamente):

onEnterFrame = function(){
//Pega o Numero do Frame Corrente
var cont:Number = _currentframe;
//Cria Variável para Receber o XML
var d1:XML = new XML();
//Recebe os Dados do puxad1.php
d1.load( "/riosdor/grafico/puxadados/puxad1.php" );
	d1.onLoad = function( success ){   
		if ( success ){
			var valor = this.firstChild.firstChild.nodeValue;
			var fvalor = parseInt(valor);
			fvalor = fvalor + 1;
			txt1.text = valor;
			//if (cont == valor){
			gotoAndStop(fvalor);
			//}
		} 
		else {      
		trace( "Não foi possível carregar o conteúdo" );   
	}
}
}
PHP(Apenas de uma coluna):

	while($sql = mysql_fetch_array($query)){ 
				//Atribui Os valores dos Campos as Variáveis
				$d1 = $sql["d1"];
				break;
			}
			//Pega o Valor de "d1" e "d2" e joga para onde o Flash possa pegar
			header( "Content-type: text/xml; chatset=UTF-8" );
			//$xml = "<dado>$dado</dado>";
			//$xml .= "<dado2>raffa</dado2>\n";
			printf("<dado>$d1</dado>");
			die;
		}
		//session_destroy();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize o "setInterval" para que efetue a leitura do código em tempo determinado...

 

Abs.

 

Mas como uso esse "setInterval"? Como disse eu tenho cada coluna em um Symbol, onde entraria esse setInterval? Em cada symbol....e como uso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O "setInterval" funciona como uma repetição de código (loop), o diferencial é que você é quem determina o tempo para esta repetição.

 

Você pode utilizar de várias formas, eu não vou dar exemplo pois não sei como está sua aplicação, mas basicamente seria uma instrução para repetir a leitura do frame ou código onde carrega os dados do php...

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquisei um pouco sobre essa setInterval e achei algumas coisas, tava tentando fazer funcionar mas não consegui nada...meu codigo está assim(Esse código é apenas de uma das 7 colunas, por que cada coluna tem um código para poder puchar um dado do banco):

onEnterFrame = function(){
//Pega o Numero do Frame Corrente
var cont:Number = _currentframe;
//Cria Variável para Receber o XML
var d1:XML = new XML();
//Recebe os Dados do Puxadados.php
d1.load( "/riosdor/grafico/puxadados/puxad1.php" );
	d1.onLoad = function( success ){   
		if ( success ){
			var valor = this.firstChild.firstChild.nodeValue;
			var fvalor = parseInt(valor);
			fvalor = fvalor + 1;
			txt1.text = valor;
			gotoAndStop(fvalor);
		} 
		else {      
		trace( "Não foi possível carregar o conteúdo" );   
	}
}
}
A sintáxe que encontrei do setInterval foi "setInterval(<função>, <tempo>);" está correto? onde entraria no meu codigo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

setInterval():

var tempo:Number = setInterval(intervalo, 1000); //1 segundo em milisegundos de intervalo
var i:Number;
function intervalo(){
i++;
trace('Eu sou o intervalo de numero: '+ i);
}
Use setInterval para fazer isso que você quer e não onEnterFrame... onEnterFrame vai causar problemas a você. Pois ele executa muito rapido e pode não dar tempo de o script ler o banco.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

setInterval():

var tempo:Number = setInterval(intervalo, 1000); //1 segundo em milisegundos de intervalo
var i:Number;
function intervalo(){
i++;
trace('Eu sou o intervalo de numero: "+ i);
}
Use setInterval para fazer isso que você quer e não onEnterFrame... onEnterFrame vai causar problemas a você. Pois ele executa muito rapido e pode não dar tempo de o script ler o banco.

 

Abraços

 

Gostei do setInterval, deu até um "efeito" legal, mas não resolveu meu problema ainda. Quando ponho os dados via php no banco, o flash só atualiza-se quando se abre e fecha a página. O XML basta você atualizar para mostra o novo valor, quer dizer, creio que o problema está no Flash!

Segue como ficou o código com setInterval (Está certo?):

var tempo:Number = setInterval(intervalo, 1000); //1 segundo em milisegundos de intervalo 
var i:Number; 
function intervalo(){ 
i++; 
trace('Eu sou o intervalo de numero: '+ i); 
//Pega o Numero do Frame Corrente
var cont:Number = _currentframe;
//Cria Variável para Receber o XML
var d1:XML = new XML();
//Recebe os Dados do Puxadados.php
d1.load( "/riosdor/grafico/puxadados/puxad1.php" );
	d1.onLoad = function( success ){   
		if ( success ){
			var valor = this.firstChild.firstChild.nodeValue;
			var fvalor = parseInt(valor);
			fvalor = fvalor + 1;
			txt1.text = valor;
			//if (cont == valor){
			gotoAndStop(fvalor);
			//}
		} 
		else {      
		trace( "Não foi possível carregar o conteúdo" );   
	}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse

d1.load( "/riosdor/grafico/puxadados/puxad1.php" ); é um xml né?

 

Então tente colocar assim:

d1.load( "/riosdor/grafico/puxadados/puxad1.php?cacheKill="+Math.random()*999 );

 

Assim não cacheia o XML

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse

d1.load( "/riosdor/grafico/puxadados/puxad1.php" ); é um xml né?

 

Então tente colocar assim:

d1.load( "/riosdor/grafico/puxadados/puxad1.php?cacheKill="+Math.random()*999 );

 

Assim não cacheia o XML

 

Abraços

 

Ele realmente estava cacheando o xml!!! Mas agora o Flash está lendo só o arquivo que pucha os dados do puxad1.php, isso é, todas as colunas estão com o dado colocado no campo d1...alguma coisa co essa linha que altera o cache pois não mudei mais nada no codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

errr cacheKill não é nada... é apenas um parametro enviado via get para pegar seu XML ele não é uma variavel que vai interferir nos seus arquvios ou coisa parecida...

 

O que ele faz é só impedir que você pegue o mesmo arquivo duas vezes...

 

O erro deve ta em outro lugar ;)

Lhe garanto que no kill não é

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

errr cacheKill não é nada... é apenas um parametro enviado via get para pegar seu XML ele não é uma variavel que vai interferir nos seus arquvios ou coisa parecida...

 

O que ele faz é só impedir que você pegue o mesmo arquivo duas vezes...

 

O erro deve ta em outro lugar ;)

Lhe garanto que no kill não é

 

Abraços

 

Aaaa tá então era po isso, eu tb estava usando uma variável junto com o cacheKill com isso tava ficando armazenado o valor do primeiro post. Vlew muito obrigado mais uma vez berseck.

 

!!RESOLVIDO!!

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.