- Home
- Categorie
- Coding e Sistemistica
- Javascript & Framework
- Contenuto che si aggiorni senza refresh classico
-
Contenuto che si aggiorni senza refresh classico
Salve ragazzi...
Ho una minichat realizzata con php e mysql...c'è un piccolo problemino che vorrei risolvere,si sa nelle chat il contenuto deve essere aggiornato in tempo reale, ho messo un <meta http-equiv="refresh" content="3" /> nella pagina contenuta dall'iframe.ma la soluzione non mi soddisfa a pieno...io vorrei farsi' che io nel momento in cui invio il dato sia io che l utente che sta dall altra parte possano leggere il tutto in tempo reale senza dover per forza aspettare il refresh della pagina....come è possibile fare ciò..?Ovviamente evitando i classici <meta http-equiv="refresh" content="3" /> ?
Che soluzioni adottare?Grazie
-
Ciao carlitos1982,
Puoi fare in ajax le richieste, cosi eviti i refresh.
Per esperienza personale ti avverto che avevo provato a fare la cosa, e con circa 200 utenti online sono riuscito a far dare i numeri ad un server dedicato che era rallentato non poco perchè iniziavano ad esserci tante richieste simultanee. Se hai poca gente online non avrai problemi, ma se hai numeri un pò più grandi, sopratutto se ti trovi su un hosting penso te lo faranno togliere.
-
Ciao Thedarkita,
si diciamo che la chat è per pochi utenti quindi non dovrebbe crearmi problemi..il problemino problemone però è che di ajax aimè l unica cosa che conosco e la squadra di calcio olandese..:D
Ok..a parte gli scherzi..come si realizza tale cosa con ajax..hai qualche esempio..guida da suggerirmi perpoter realizzare la cosa.?
-
Non è difficile
Prova cosi:
<script> function Chat() { var xmlHttp; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Il tuo browser non supporta la chat!"); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.getElementById("QUI-ID-DEL-DIV-IN-CUI-INSERIRE-OUTPUT-DEL-FILE-PHP").innerHTML=xmlHttp.responseText; setTimeout('Chat()', 3000); //tempo di refresh generale } } xmlHttp.open("GET","/filecontesto.php",true); xmlHttp.send(null); } setTimeout('Chat()', 3000); </script>
-
allora...questo codice va inserito nella pagina in cui mostro a video i messaggi giusto..?
Mi spiego la mia chat è composta da due pagine in php...Questa e minichat.php che mostra il form per l invio dei messaggi solo a chi è loggato..
[PHP]
<?php
//Apro la sessione e...
session_start();
// Sessione impostata a 10 min
ini_set('session.gc_maxlifetime', '1800');include "config.php"; // file di connessione al Db
//verifico se l utente è bannato o meno..
if($_SESSION['logged'] == 1 && mysql_num_rows(mysql_query("SELECT bannato FROM minichat WHERE bannato = '".$_SESSION[ 'nickname']. "'" )) > 0)
die('Sei bannato');//verifico che dopo il login io abbia la chiave di sessione ad 1
elseif($_SESSION['logged'] == 1)echo"
<BODY background="/modificaprofilo.jpeg">
//il form pe rl invio dei messagggi viene mostrato solo a chi è loggato
<form action="minichatframe2.php" name="chat" method="POST">
<textarea rows="2" size="40" maxlength="20" id="text" name="text" cols="30"></textarea><br><br>
<a href="javascript:Popup2('faccine2.htm')"><img src="faccine3/smile_sorriso.gif" border="0" alt="Qui trovi altre faccine da inserire!"></a>
<a href="javascript:Popup('faccine.htm')"><img src="faccine/smile.gif" border="0" alt="Inserisce le faccine che piu' ti piacciono!"></a>
<a href="javascript:Popup1('colori.htm')"><img src="colori.gif" border="0" alt="Inserisci il testo che vuoi colorare fra i tag <font>"></a>
<br>
<center><input type="image" src="inviochat.gif" ></center>";
?>[/PHP]poi ho la pagina che mostra a video il tutto..
minichat2.php
[PHP]
<?//Apro la sessione e...
session_start();include "config.php"; // file di connessione al Db
include "minichatframe.php";if(isset($_POST)){
$id_user="";
$text="";$id_user=mysql_real_escape_string($_SESSION['nickname']);
$text=htmlentities($_POST['text']);
$sesso=$_SESSION['sesso'];
if ((empty($text))== false) // se $text non è vuoto o nullo
{
$sql = "INSERT INTO minichat (id_user, testo,tempo,sessochat) VALUES ('$id_user','$text',CURRENT_TIME(),'$sesso')";
$query= @mysql_query ($sql) or die (mysql_error());$recuperoid=mysql_insert_id();
$trim_id=$recuperoid-60;$sql_delete="DELETE FROM minichat WHERE id<'$trim_id'";
$query= @mysql_query ($sql_delete) or die (mysql_error());}
}else{
}$sql_select="SELECT id_user, testo,tempo,sessochat FROM minichat ORDER BY id DESC LIMIT 5 ";
$query_select= @mysql_query($sql_select) or die (mysql_error());while($row=mysql_fetch_array($query_select))
{
$row['testo'] = str_replace("grr","<img_src='/faccine3/smile_diavolo.gif'>",$row['testo']);$row['testo'] = str_replace(":*","<img_src='/faccine3/smile_bacio.gif'>",$row['testo']);
$row['testo'] = str_replace("@_@","<img_src='/faccine3/smile_arrabbiato.gif'>",$row['testo']);
//Funz<ione che imposta massimo 48 lettere per riga
$stringa=$row['testo'];
$nuova_stringa = wordwrap($stringa, 42, "<br />\n",true);
$nuova_stringa = str_replace("<img_src", "<img src", $nuova_stringa);
$nick=$row['id_user'];
$maiuscola=$row['id_user'];
$maiuscola=ucfirst($maiuscola);if($row['sessochat'] == 'femmina'){
$classenick="donna";
$colore="FF99FF";
}else{
$classenick="uomo";
$colore="0066FF";
}
echo"<BODY background="/modificaprofilo.jpeg">
<div id="minichatsito"><font color="#".$colore."" size ="3" face="Arial Bold"><b><a target="contenuto" href="profiloaltri.php?nickname=".$nick.""
class="".$classenick."" >".$maiuscola.": </font></a></b><font class="tempo" color="#000000"
face="Arial Bold" size="1">".$row['tempo']."</font><br><font class="testo" color="#000000" face="Arial Bold" size="2">".$nuova_stringa."</font></b></div><br>";}
?> [/PHP]E in questa ultima pagina che devo inserire il codice che te mi hai postato?
Nel tuo codice filecontesto.php sarebbe nel mio caso sempre quest ultima pagina..?
-
ho inserito il tuo script nella mia minichat2.php
cosi..
[php]
<html>
<head><link rel="stylesheet" type="text/css" href="stilechat.css" />
<script>
function Chat()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Il tuo browser non supporta la chat!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.getElementById("minichatsito").innerHTML=xmlHttp.responseText;
setTimeout('Chat()', 3000); //tempo di refresh generale
}
}
xmlHttp.open("GET","/minichat2.php",true);
xmlHttp.send(null);
}
setTimeout('Chat()', 3000);
</script>
[/php]che sarebbe la pagina che mostra a video il contenuto..
Come mai appena apro il sito mi mostra il tutto normalmente mentre dopo 2 o 3 secondi dopo mi mostra subito sotto la pagina dei contenuti della chat una copia del contenuto di ciò che c'è scritto sopra..?
Poi quando invio il messaggio subito dopo mi mostra una copia del form pe rl invio dei messaggi..?
Cioè praticamente mostra a video 2 form per l invio dei messaggi e 2 contenuti uguali di ciò che si scrive nella chat...come mai?il sito e strutturato in frame..
[html]<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Prova con frame</title>
</head>
<frameset rows="23%,">
<frame name="intestazione" id="intestazione" frameborder="no" src="intestazione.php" scrolling="no" NOREsize>
<frameset cols="20%,"><frame name="menu" id="menu" frameborder="no" src="minichat2.php" NOREsize> <frame name="contenuto" frameborder="no" id="contenuto" src="contenuto.php"> </frameset>
</frameset>
<noframes> <p>Qui può essere indicato il link a<A href="senzaFrame.html"> una versione del sito</a> che non utilizzi un layout a frame</p> </noframes>
</frameset>
</html>[/html]Questo influisce?
-
Ciao,
Scusa il ritardo allora di come hai la cosa organizzata non ci ho capito molto, quindi ti faccio un esempio veloce dell'implementazione, che non dovresti avere problemi a comprendere, in caso chiedi ;).
miapagina.php
[php]
<html>
<head>
</head>
<body>
<!-- altro HTML -->
<div id="msg"></div>
<script>
function Chat()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Il tuo browser non supporta la chat!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.getElementById("msg").innerHTML=xmlHttp.responseText;
setTimeout('Chat()', 3000); //tempo di refresh generale
}
}
xmlHttp.open("GET","/aggiorna.php",true);
xmlHttp.send(null);
}
setTimeout('Chat()', 3000);
</script>
<!-- Altro HTML-->
</body>
</html>
[/php]Nel file aggiorna.php metti i messaggi da mostrare, ogni 3 secondi verrà fatta una richiesta ad aggiorna.php prenderà l'output e verrà sostituito al contenuto del nostro div.
Il funzionamento come puoi ben vedere è facile facile.
-
continua a non funzionare...quando premo invia mi mostra il contenuto dei messaggi due volte..:bho:
-
funziona...:)
alcuen volte però si blocca...sto usando un hosting gratuito altervista per provare...e dovuto a quello sicuramente che non regge le connessioni..cosa m consigli di prendere per non avere problemi di bloccaggio della chat..?Ovviamente su costi contenuti...
-
Purtroppo non credo ci sia soluzione con costi contenuti.
Quanta gente dovresti avere li collegata nei momenti di picco?
-
credo una 50 ina...
-
Mi sa che non funziona..ho appena provato con un amico..lui scriveva ma nulla..i suoi messaggi li ho letti solo dopo che ho scritto io..e pure avevo provato dal mio pc tenendo le pagine della chat aperte su due finestre differenti del browser..e funzionava!Cioè se scrivevo in una finestra automaticamente nell altra mi mostrava il messaggio...
Dove cavolo sbaglio..?
-
Ciao,
Dovresti postare le pagine, altrimenti non saprei il motivo.
-
Ho risolto..:)
-
Bene
Magari posta la soluzione per chi come te sta cercando di fare la stessa cosa.
-
nulla di che..il problema era il mio di come avvevo strutturato la minchat...
avevo sia il form che la lettura dei messaggi nella stessa pagina...e quando la funziona in javascript mi richiamava la pagina da visualizzare mi succedeva che mentre scrivevo nel form passati 3 secondi cancellava il tutto...aggiornvava praticamente...quindi ho la pagina con la script in ajax che sta per conto suo,poi ho creato la sola pagina per la lettura dei messaggi che sarebbe quella che viene richiamata dalla pagina che ha al suo interno lo script ajax..e il form sta su un altra pagina per conto suo..che includo solo per chi è loggato..