Ir para conteúdo

POWERED BY:

Arquivado

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

Damon

Atualizando pagina com ajax

Recommended Posts

Tenho uma pagina chamada "chat_conversa.php" que esta dentro de um frame, estou tentando atualiza-la com ajax porem até nesse momento não obteve êxito.

 

Estava utilizando o reflesh e já tentei utilizar o setTimeout porem os resultado são os mesmos, ou seja, em ambos a pagina fica piscando.

 

Vou disponibilizar o código da pagina para que possamos analisar juntos, se alguém poder me ajudar

além de ganhar os pontos ficarei muito grato.


<?php
session_start();
$session= session_id();

?>

<html>
<head>
<meta http-equiv="Content-Language" content="pt-br">
<meta http-equiv="Content-Type" content="text/html"; charset= "ISO-8859-1">
<title>suporte</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="jquery-1.3.2.js"></script>




 <script type="text/javascript">
function Ajax(){
var xmlHttp;
        try{    
                xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
        }
        catch (e){
                try{
                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
                }
                catch (e){
                    try{
                                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e){
                                alert("No AJAX!?");
                                return false;
                        }
                }
        }

xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4){
                document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText;
                setTimeout('Ajax()',500);
        }
}
xmlHttp.open("POST",'formconversa',true); // aqui configuramos o arquivo
xmlHttp.send(null);
}

window.onload=function(){
        setTimeout('Ajax()',500); // aqui o tempo entre uma atualização e outra
}

	
	function rolar(){
scrollTo(0,100000);
}

</script>
</head>


<body>
    <div id="ReloadThis">
 
<?php

	require("classes.php");
	require("conecta.php");
	
	$sql = "select * from mensagem 
	WHERE dbo.mensagem.session = '$session' 
	or
	dbo.mensagem.quemenviou = 'ATENDENTE' and id_atendimento = (SELECT MAX(id_atendimento) FROM ATENDIMENTO_CHAT)  ";
	$res=mssql_query($sql,$db_conexao);
	
	while ($row = mssql_fetch_array($res))
	{
		$quemenviou = $row["quemenviou"];
		$mensagem = $row["mensagem"];
		$nomeenviou = $row["nomeenviou"];
		$hora = $row["hora"];
			
			
		if ($quemenviou=="CLIENTE")
		{

			echo "<p><font color='#000000'> $hora $nomeenviou:</font><br> 
					      <font color='#666666'>$mensagem</font></p>";
		
		
		}
		if ($quemenviou=="ATENDENTE")
		{
		
			echo "<p><font color='#006600'> $hora $nomeenviou:</font><br>
					       <font color='#666666'>$mensagem</font></p>";
		}
		
	
	}
?>
</div>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Progjunior Daniel

Já sim, ele também faz piscar a pagina. Na verdade pelo que eu pesquisei não vai ter nenhum método que não faça

a pagina piscar, a não ser a requisição via ajax ou o long pooling que seria o mais certo. Mas como eu não manjo nenhum dos dois

estou pedindo o pessoal que tem mais experiencia no assunto para da uma força.

Mas pelo jeito acho que esta todo mundo igual eu mesmo..hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para usar AJAX o primeiro passo é "modular" sua página:

 

Primeiro precisa de um index, que é a página que vai ficar aberta:

index.php

 

<?php
session_start();
$session= session_id();

?>

<html>
<head>
<meta http-equiv="Content-Language" content="pt-br">
<meta http-equiv="Content-Type" content="text/html"; charset= "ISO-8859-1">
<title>suporte</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="jquery-1.3.2.js"></script>




 <script type="text/javascript">
function Ajax(){
var xmlHttp;
        try{    
                xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
        }
        catch (e){
                try{
                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
                }
                catch (e){
                    try{
                                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e){
                                alert("No AJAX!?");
                                return false;
                        }
                }
        }

xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4){
                document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText;
        }
}
xmlHttp.open("POST",'chat.php',true); // aqui configuramos o arquivo
xmlHttp.send(null);
}

window.onload=function(){
        setInterval('Ajax()',3000); // aqui o tempo entre uma atualização e outra
}

function rolar(){
scrollTo(0,100000);
}
</script>
</head>


<body>
    <div id="ReloadThis"></div>
</body>
</html>

 

 

Eu troquei o "setTimeout" por "setInterval" que só precisa ser usado 1 vez. 500 milisegundos é um intervalo muito curto, de duas uma: Ou você ia travar o PC do usuário ou você ia travar seu servidor com tantas solicitações. Aconselho um tempo de no mínimo 3 ~ 5 segundos (3000 ~ 5000).

 

O segundo arquivo é o módulo do seu CHAT, que vai ser recarregado de tempos em tempos e re-inserido na página.

chat.php

 

<?php

	require("classes.php");
	require("conecta.php");
	
	$sql = "select * from mensagem 
	WHERE dbo.mensagem.session = '$session' 
	or
	dbo.mensagem.quemenviou = 'ATENDENTE' and id_atendimento = (SELECT MAX(id_atendimento) FROM ATENDIMENTO_CHAT)  ";
	$res=mssql_query($sql,$db_conexao);
	
	while ($row = mssql_fetch_array($res))
	{
		$quemenviou = $row["quemenviou"];
		$mensagem = $row["mensagem"];
		$nomeenviou = $row["nomeenviou"];
		$hora = $row["hora"];
			
			
		if ($quemenviou=="CLIENTE")
		{

			echo "<p><font color='#000000'> $hora $nomeenviou:</font><br> 
					      <font color='#666666'>$mensagem</font></p>";
		
		
		}
		if ($quemenviou=="ATENDENTE")
		{
		
			echo "<p><font color='#006600'> $hora $nomeenviou:</font><br>
					       <font color='#666666'>$mensagem</font></p>";
		}
		
	
	}

 

 

Outra coisa, se for mesmo usar AJAX recomendo que use o AJAX do jQuery que permite melhor desempenho, segurança e processamento de erros. Estude também como usar JSON ao invés de HTML puro, ele pode melhorar consideravelmente o tráfego, além de permitir uma comunicação mais dinâmica entre servidor e navegador.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • cahe7cb

Fiz o que vc me falou mas não deu certo, a pagina ainda não esta sendo atualizada ou seja não esta buscando as mensagens.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, testei o seu script AJAX aqui e funciona... Só não tenho como testar o "chat.php" tente acessar ele diretamente para ver se ele ta funcionando mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse, a parte do AJAX parece está funcionando normalmente, ele atualiza a página. Acho que o problema está no script do chat, o PHP exibe algum erro quando você carrega a página?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não aparece nenhum erro, o código do chat eu já avia testado usando o reflesh e o setInterval ele funcionou perfeitamente porem a pagina fica piscando.

 

Quando eu executei o arquivo ajax separado, ele apareceu como download e abriu no meu editor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal

 

Eu fiz alguns testes com estes script

 

Eu criei uma pagina index.html e uma pagina numero.php para testa aquele código ajax com o seguinte proposito

da pagina index atualizar e criar numeros rand.

 

index.html

<html>
<body>

<script type="text/javascript">
function Ajax(){
var xmlHttp;
        try{    
                xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
        }
        catch (e){
                try{
                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
                }
                catch (e){
                    try{
                                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e){
                                alert("No AJAX!?");
                                return false;
                        }
                }
        }

xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4){
                document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText;
                setTimeout('Ajax()',1000);
        }
}
xmlHttp.open("POST","numero.php",true); // aqui configuramos o arquivo
xmlHttp.send(null);
}

window.onload=function(){
        setTimeout('Ajax()',1000); // aqui o tempo entre uma atualização e outra
}
</script>

<div id="ReloadThis"></div>

</body>
</html>

numero.php

<?php echo rand(); ?>

Assim funcionou perfeitamente, menos no explore local.

 

Fiz o teste fazendo a pagina index.html buscar uma pagina teste.php que criei aonde nesta pagina teste esta o select que busca no BD os meus aquivos.

 

Porem me parece que a pagina index.html não esta conhecendo a pagina teste.php os scripts ficaram assim:

 

index.html

<html>
<body>

<script type="text/javascript">
function Ajax(){
var xmlHttp;
        try{    
                xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
        }
        catch (e){
                try{
                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
                }
                catch (e){
                    try{
                                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e){
                                alert("No AJAX!?");
                                return false;
                        }
                }
        }

xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4){
                document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText;
                setTimeout('Ajax()',1000);
        }
}
xmlHttp.open("POST","teste.php",true); // aqui configuramos o arquivo
xmlHttp.send(null);
}

window.onload=function(){
        setTimeout('Ajax()',1000); // aqui o tempo entre uma atualização e outra
}
</script>

<div id="ReloadThis"></div>

</body>
</html> 

teste.php

<?php


 require ("classes.php");
 require ("conecta.php");
 
 
 $bd = '  select * from  mensagem ';
 $res = mssql_query($bd, $db_conexao);
 
 	while ($row = mssql_fetch_array($res))
	{
		$quemenviou = $row["quemenviou"];
		$mensagem = $row["mensagem"];
		$nomeenviou = $row["nomeenviou"];
		$hora = $row["hora"];
	
	
	}

 
?>


<html>
<head>
</head>
<body>
<p>  Aqui vai as mensagens do banco de dados: <p>
<?php   echo "<p>$quemenviou</p>
					  <p>$mensagem</p>
					  <p>$nomeenviou</p>" ?>


</body>
</html> 

Obs: Eu já testei a pagina teste.php ele busca os arquivo perfeitamente, a pagina index.html que não esta reconhecendo a pagina teste.php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal conseguir resolver

 

Atualização não estava acontecendo por que no caso pagina teste,php tinha um require isso estava atrapalhando, coloquei a conexão

direta dentro da pagina e deu certo.

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.