Olá pessoal! Bom, deixa eu explicar o problema só que de uma maneira breve. Bom, tenho de criar um sistema que ao verificar uma alteração de uma determinada tabela no banco de dados, faça uma atualização da página conteudo.php, que está sendo incluída via Ajax. Até hoje eu estou tentando terminar o sistema, mas está difícil, pois ainda estou començando a aprender Ajax.
Já consigo fazer o sistema funcionar parcialmente, mas agora tem um grande problema. Como você verá no código abaixo, o sistema contém um setInterval de 5 segundos, para verificar se algo se alterou no banco de dados. O sistema funciona nos primeiros segundos e depois trava todo o browser, este é o problema agora.
Verifiquei que ao invés de 5 em 5 segundos, o sistema está fazendo a checagem bem mais depressa, tão rápido a ponto de travar o browser. Verifiquei isso ao mostrar os valores de algumas variáveis.
A pergunta é... porque isso está acontecendo? O sitema funciona... mas por pouco tempo, antes que trave tudo.
Antes eu havia tentado passar os valores através do método Get. Mas como não estou muito familiarizado ainda com Ajax, resolvi utilizar sessões em PHP. Eu utilizo sessão para guardar a última alteração dos dados no banco de dados e depois comparar com novos dados fazendo uma nova consulta SQL, para saber se devo atualizar ou não a página.
Eu preciso muito deste sistema, pois atualmente estou fazendo sucessivos refresh na página,também com Ajax, independente se alterou ou não algo na base de dados, o que é muito mal para a navegação do usuário.
Veja o código:
A página conteudo.php contém apenas algumas consultas ao banco de dados, por isso não vale a pena mostrar aqui.
index.php
<?PHP
session_start();
?>
<html>
<head>
<script type="text/javascript">
function getHTTPObject()
{
if(window.XMLHttpRequest)
{
return new XMLHttpRequest();
}
else
if(window.ActiveXObject)
{
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
for(var i = 0; i < prefixes.length; i++)
{
try
{
return new ActiveXObject(prefixes[i] + ".XMLHTTP");
} catch (e) {}
}
}
}
function ajax(url,id_conteudo)
{
var xmlHttp = getHTTPObject();
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4)
{
var retorno = xmlHttp.responseText;
document.getElementById(id_conteudo).innerHTML = retorno;
}
}
xmlHttp.open("GET", url,true);
xmlHttp.send(null);
}
function atualizar_pags()
{
<?PHP $conteudo = unserialize($_SESSION["dados_online"]); ?>
var atualizar = '<?PHP echo $conteudo['atualizar']; ?>';
if(atualizar == "sim")
{
ajax('conteudo.php','refresh_pag');
ajax('<?PHP echo $_SERVER["PHP_SELF"]; ?>','refresh_sql');
}
else if(atualizar == "não")
{
ajax('<?PHP echo $_SERVER["PHP_SELF"]; ?>','refresh_sql');
}
setInterval('atualizar_pags()',5000);
}
</script>
</head>
<body onload="atualizar_pags();">
<div id="refresh_sql">
<?PHP
$conteudo = unserialize($_SESSION["dados_online"]);
$total_distinct = $conteudo["total_distinct"];
$_SESSION["dados_online"] = serialize($conteudo);
if($conteudo["total_distinct"] == null)
{
$total_distinct = 0;
}
// $total_distinct é uma variável que eu uso para saber ouve alguma alteração no banco de dados,
// se sim, deve atualizar a págia conteudo.php logo abaixo na <div id="refresh_pag"></div>
// Comando SQL -> Retorna uma variável entitulada $atualizar, tomando os valores 'sim' ou 'não'
if (atualizar == 'sim')
{
$conteudo = unserialize($_SESSION["dados_online"]);
$conteudo["total_distinct"] = $total_distinct_sql;
$conteudo["atualizar"] = 'sim'; // Este valor será passado para o Ajax lá em cima, para poder fazer a atualização da página. Preferia que fosse feito com GET,
// mas não consegui passar o valor com este método, por isso estou usando sessão em PHP.
$_SESSION["dados_online"] = serialize($conteudo);
}
else
{
$conteudo = unserialize($_SESSION["dados_online"]);
$conteudo["total_distinct"] = $total_distinct_sql;
$conteudo["atualizar"] = 'não';
$_SESSION["dados_online"] = serialize($conteudo);
}
?>
</div>
<div id="refresh_pag"></div>
</body>
</html>
Pergunta
robot7p
Olá pessoal! Bom, deixa eu explicar o problema só que de uma maneira breve. Bom, tenho de criar um sistema que ao verificar uma alteração de uma determinada tabela no banco de dados, faça uma atualização da página conteudo.php, que está sendo incluída via Ajax. Até hoje eu estou tentando terminar o sistema, mas está difícil, pois ainda estou començando a aprender Ajax.
Já consigo fazer o sistema funcionar parcialmente, mas agora tem um grande problema. Como você verá no código abaixo, o sistema contém um setInterval de 5 segundos, para verificar se algo se alterou no banco de dados. O sistema funciona nos primeiros segundos e depois trava todo o browser, este é o problema agora.
Verifiquei que ao invés de 5 em 5 segundos, o sistema está fazendo a checagem bem mais depressa, tão rápido a ponto de travar o browser. Verifiquei isso ao mostrar os valores de algumas variáveis.
A pergunta é... porque isso está acontecendo? O sitema funciona... mas por pouco tempo, antes que trave tudo.
Antes eu havia tentado passar os valores através do método Get. Mas como não estou muito familiarizado ainda com Ajax, resolvi utilizar sessões em PHP. Eu utilizo sessão para guardar a última alteração dos dados no banco de dados e depois comparar com novos dados fazendo uma nova consulta SQL, para saber se devo atualizar ou não a página.
Eu preciso muito deste sistema, pois atualmente estou fazendo sucessivos refresh na página,também com Ajax, independente se alterou ou não algo na base de dados, o que é muito mal para a navegação do usuário.
Veja o código:
A página conteudo.php contém apenas algumas consultas ao banco de dados, por isso não vale a pena mostrar aqui.
index.php
Editado por robot7pLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.