Newsgroup: it.comp.www.php
Titolo: chat con PHP e javascript

--- postato anche su it.comp.lang.javascript ---
Ciao a tutti.
Ho realizzato una chat (una sottospecie) con PHP e javascript. La cosa
funziona più o meno così.
La pagina è divisa in 2 frame, in quello alto c'è una TEXTAREA che contiene
i msg della chat, in quello basso c'è un INPUT di tipo testo che serve ad
inserire un nuovo msg. Nel frame basso dando il submit un codice php accoda
il msg ad un file e ricarica il frame. Nello stesso frame è presente un
codice misto javascript-PHP che aggiorna il contenuto della TEXTAREA.
Beh, ovviamente la cosa che non funziona bene è che per vedere i msg degli
atri devo per forza mandarne uno, perchè l'aggiornamento della TEXTAREA
avviene solo quando invio un nuovo msg ---> davvero brutto. Adottando la
tecnica del frame invisibile che si ricarica da solo ogni tot e che così
aggiorna la TEXTAREA, questo problema si risolve, ma resta il fatto,
esteticamente orrendo secondo me, che si vede la barra di caricamento del
browser che carica in continuazione e soprattutto si sente quell'orrendo
clic di IE ogni volta che il frame si ricarica.
Quello che mi servirebbe è una sorta di "evento" che il server genera quando
il file viene modificato e che il browser è in grado di gestire (ricaricando
la TEXTAREA). Oppure qualcosa per leggere in continuazione il file senza
ricaricare nessun frame. A occhio queste cose mi sembrano possibili sono con
java e tecnologia servlet, ma magari non ho studiato abbastanza.
Thanx
giaconet


A prima vista oresei dire che non č possibile...
La cosa piů semplice č location.reload con javascript ma se non vuoi fare
cosě puoi provare cosě:
<?
// nessun limite di tempo nell'esecuzione
set_time_limit(0);
function verifica_messaggi_sul_server() {
    // qui metti il codice php
    // che controlla se ci sono
    // messaggi
}
do {
    verifica_messaggi_sul_server();
} while (TRUE);
?>
In pratica cosě facendo lo script non finisce mai l'esecuizione e continua a
controllare se ci sono msg sul server...
Forse pero' non č l'ideale mantenere lo script in esecuzione per troppo
tempo...
Ciao
Alex

scusa, ma perchè non usi la funziona Javascript
SetTimeout('tuafunzione()',1000)
--
CIAO!
Gusher

"[Gusher]" <[
fla...@tiscalinet.it
]> ha scritto nel messaggio
news:9tiv4l$ouf$1...@atlantis.cu.mi.it...

No ragazzi il problema non è far ripetere lo script javascript.
Facciamo un'esempio che è meglio.
pippo carica i 2 frame (quello alto con la TEXTAREA, quello basso con INPUT
e il codice misto).
Il secondo frame legge il file chat.txt e scrive nella TEXTAREA il
contenuto:
<giaconet>C'è nessuno??
<lalla>Ci sono io.
pippo non scrive niente e aspetta per vedere cosa si dicono giaconet e
lalla, ma, badaben badaben, non vedrà mai niente (anche se giaconet e lalla
si scrivono 20.000 msg) finché non ricarica il frame basso. Anche ripetendo
il codice javascript questo contiene sempre gli stessi elementi (i primi 2)
perché per leggere un'altra volta nel file chat.txt devo rieseguire il file
.php (in pratica ricaricare il secondo frame).
Spero di essermi spiegato meglio stavolta.
Bye
giaconet

 ha scritto nel messaggio
news:9tim3t$2ti47$1...@ID-71483.news.dfncis.de...


Spero di essermi spiegato meglio stavolta.
Ti conviene scegliere uno dei frames e definirlo "master". Sarebbe meglio
se fosse un frame piccolo con poca roba (che so: status line con orologio
o cose simili).
Questo frame ha un controllo PHP molto rapido, del tipo
	if (fileatime('chat.lock') > (time() - $SECONDS))
		include "reload.js";
e reload.js e' un javascript che forza il reloading degli ALTRI frames.
Appena qualcuno scrive in chat viene marcato il file "chat.lock"; quindi,
pippo ricarica una volta ogni $SECONDS secondi il SOLO FRAME MASTER, ecco
perche' e' bene che *quello* sia piccolo, e nel codice del frame non c'e'
MAI il javascript perche' non serve.
Ma... appena giaconet scrive, chat.lock viene marcato, e $SECONDS secondi
piu' tardi il frame di pippo contiene un comando in piu'. SOLO ALLORA, il
browser di pippo richiede gli altri, pesantissimi frames :-)
Leonardo tirchio
-- 
And where the black and corkscrew towers climb
Lost and athirst the ragged pack abides,
Old as the aeons, trapped in tombs of time,
Sailing the tortuous temporal tides...

 Leonardo tirchio
Si, una soluzione del genere l'ho già provata (vd. primo msg del thread). Il
mio frame di controllo non era piccolo, era invisibile! E conteneva solo il
codice necessario a controllare la presenza di nuovi msg. Così funziona ma
il problema è che ogni tot secondi il browser ricarica il frame con un click
davvero fastidioso e con la barra di caricamento che "svela" il trucco.
Concludendo, non mi piace.
Cmq grazie.
giaconet
PS. Ma è possibile che javascript non possa leggere un file di testo dal
server? Se fosse possibile avrei già risolto con un setInterval come mi
suggerivano sopra.

suggerivano sopra.
Ho-hum. Ma quando li leggesse, farebbe comunque click e vedresti comunque
la barra rivelatrice.
Leonardo
