Optimizar chat PHP/Ajax
Bom, precisava de um chat que fosse integrado com o banco de dados do site, e como n achei nenhum script que se encaixasse com oque eu queria decidi criar meu própio chat. Até para adquirir alguma experiência com ajax.
Bom primeiro fiz uma div e coloquei o form pra mensagem:
echo "<div id=\"chatdiv\" class=\"scroll\" style=\"background-color:#FFFDE0; overflow: auto; height:100px; width:100%; padding:5px; border: 1px solid #DEDEDE; margin-bottom:10px\">";
echo "<font size=\"1px\">Carregando...</font>";
echo "</div>";
echo "<form method=\"POST\" action=\"guild_home.php\">";
echo "<center><input type=\"text\" name=\"msg\" size=\"45\"> <input type=\"submit\" name=\"submit\" value=\"Enviar\"></center>";
echo "</form>";
Depois a parte do php pra postar na database:
if ($_POST['msg']) {
$msg = strip_tags($_POST['msg']);
if (($msg != NULL) and (strlen($msg) < 240)){
$insert['guild_id'] = $player->guild;
$insert['username'] = $player->username;
$insert['msg'] = $msg;
$insert['time'] = time();
$query = $db->autoexecute('guild_chat', $insert, 'INSERT');
}
}
OK, assim funcionava, mas eu tinha de aperta F5 a para ver cada mensagem nova. Então peguei um ajax q eu tinha aqui para detectar se novos item são enviados para sua conta e modifiquei:
var msgtime;
function loadmsg() {
set_xmlhttp();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
document.getElementById('chatdiv').innerHTML = xmlhttp.responseText;
msgtime = self.setInterval("checkmsg()", 2000);
}
}
xmlhttp.open('GET', 'checkmsgs.php', true);
xmlhttp.send(null);
}
function checkmsg() {
document.getElementById('chatdiv').scrollTop += 1000000;
msgtime = window.clearInterval(msgtime);
loadmsg();
}
loadmsg();
Então assim, a cada 2 segundos ele atualiza dentro da div o checkmsgs.php, e exibe as mensagens novas.
Problemas que tenho que resolver:
Para enviar a mensagem ele atualiza a página, e fica chato ter que clicar no input a cada mensagem que você envia...
O código antigo que eu tinha para checar se existiam itens novos não funciona junto com esse código.
Eis o código:
<!--
var intervalo;
function carregar() {
set_xmlhttp();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
document.getElementById('usr').innerHTML = xmlhttp.responseText;
intervalo = self.setInterval("atualizar()", 5000);
}
}
xmlhttp.open('GET', 'engine.php', true);
xmlhttp.send(null);
}
function atualizar() {
intervalo = window.clearInterval(intervalo);
carregar();
}
carregar();
-->
Provavelmente porque ele usa a mesma propriedade xmlhttp.responseText para executar outra página php em outra div, o engine.php
OBS: O tópico ficou bem grande pois tentei explicar ao máximo e postei quase todos os códigos, então por favor me ajudem =D
Discussão (4)
Carregando comentários...