quarta-feira, 20 de julho de 2011

Ajax: Notificando novas mensagens sem dar reload

Ás vezes surge a necessidade de você ter um script que disponibilize de tempo em tempo valores que vão sendo atualizados no banco de dados conforme sua entrada, mas como fazer isso sem dar reload na página? Ajax! 

Vamos supor que você tenha uma tabela chamada:

valorarroba
id int(11)
id_frigorifico int(9)
valor double(12,2)

Agora pense que a cada 30s cada um destes frigoríficos atualizem o valor pago por Arroba de boi conforme os negócios vão sendo fechados, e você quer disponibilizar isso para o usuário de seu sistema web praticamente em tempo real, como se ele estivesse ali ao lado dos compradores, então no script/página php que você irá mostrar esta informação ao usuário disponibilize o seguinte código javascript/Ajax:

 <script type="text/javascript">

 function ValArroba() {
  var xmlhttp;
  if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
  } else { // code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
   if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    document.getElementById("mostraValor").innerHTML=xmlhttp.responseText;
   }
  }
  xmlhttp.open("GET","valorarroba.php",true);
  xmlhttp.send();
  setTimeout("doTimer()",30000);
 }
  setInterval("showMSG()", 30000);
</script>


Agora em uma área dentro deste script, que você tem em mãos coloque a DIV que irá mostrar o valor:

<div id="mostraValor"></div>

Bom repare que o valor 30000(trinta mil) é o tempo que será recarregado esse script php dentro da DIV, e onde chamamos o script valorarroba.php, é nome do script que irá trazer estes dados, agora crie este script separadamente, exemplo:

<?php
 $conn=mysql_connect('seu_servidor','usuario','suasenha');
 if(!$conn) {
  echo("Servidor indisponível...".mysql_error());
  die;
 }
 $bd=mysql_select_db('nome_do_seu_banco_dados');
 if(!$bd) {
  echo("Banco de Dados indisponível...".mysql_error());
  die;

 }
 $sql1=mysql_query("select max(id) LastID, valor from valorarroba", $conn);
  if(!$sql1) {
   echo("Erro na consulta: ".mysql_error());
  die;
 }
 $lins = mysql_num_rows($sql1);
 $preco = mysql_result($sql1,0,'valor'); 
 echo $preco;
 unset($preco);
 unset($lins);
 unset($sql1);
 unset($bd);
 mysql_close($conn);
 unset($conn);
?> 

Ta aí, um exemplo simples, prático e aplicável a diversas situações conforme a necessidade.

Nenhum comentário:

Postar um comentário