38 messaggi dal 05 ottobre 2001
Uffa ancora chat... è vero!!!
NON POTEVI UTILIZZARNE UNA FREE DIRETE VOI?
E CHE GUSTO CI SAREBBE RISPONDEREI IO!!!

HO PRESO SPUNTO DA UNA CHAT CHE UTILIZZA SAGGIAMENTE I FRAME PER GESTIRE LA GRAFICA, HO UTILIZZATO QUALCOSA DELLA CHAT DI ASPITALIA QUALCOSALTRO DI RISKCHAT, MOLTO DI MIO .... E HO CREATO LA MIA CHAT CHE TROVATE ALLA PAGINA:
http://www.foligno.it/lanciachat.asp

IL PROBLEMA SONO I TIK DEL RELOAD DELLE PAGINE CHE DANNO AI NERVI:
SI POSSONO ELIMINARE?
OPPURE POSSO FARE A MENO DEL FASTIDIOSO RELOAD UTILIZZANDO PER LEGGERE LE APPLICATION UN MIX DI JSCRIPT E ASP?
SUGGERIMENTI? (ESCLUSO FLASH PERCHE' PROPRIO NON CI SO LAVORARE)

GRAZIE A TUTTI PER L'AIUTO CHE MI AVETE SEMPRE DATO
38 messaggi dal 05 ottobre 2001
Ho pensato ad una soluzione:
Qualcuno può darmi una mano ad aggiustare il jscript?

Senza fare il reload fisso del frame ogni 7 secondi, vorrei aggiornare il contenuto del frame solo se il contenuto di Application("messaggi") è cambiato

Se non è possibile farlo ricarico la pagina, ma solo se Application("messaggi") è cambiata non ogni 7 secondi ma solo quando arriva un nuovo messaggio

Metterei nella pagina che mostra i messaggi qualcosa del genere ma non so lavorare in JScript


<script language="JavaScript1.2" type="text/javascript">
Function init() {
// memorizzo l application in una variabile
var messaggi_old = Application("messaggi");
// lancio controllo() ogni 5 secondi
setInterval(controllo, 5000);
}


Function controllo() {
// verifico se l application è cambiata allora aggiorno messaggi_old e faccio update
if (Application("messaggi") =! messaggi_old) messaggi_old = Application("messaggi");
update();
}


Function update() {
// ricarico il contenuto della pagina
document.write Application("messaggi")
}


</script>

<body onload="init()">
11.886 messaggi dal 09 febbraio 2002
Contributi
ma Application("messaggi") non la puoi leggere lato client, devi per forza ricaricare la pagina, rassegnati.

Con flash potresti fare il controllo "dietro le quinte", senza nessun tick. Ma dovresti realizzare TUTTA la chat in flash, passare solo i nuovi messaggi non sarebbe l'ideale

Enjoy learning and just keep making
38 messaggi dal 05 ottobre 2001
Grazie BrightSoul
ho trovato una chat in ASP che non presenta il problema dei TIC al reload della pagina
http://www.theill.com/conquerchat

Il codice ASP è disponibile, è molto articolata e non ho capito ancora come funziona: è interessante visionarla

Tornando al mio problema, se è possibile, mi accontenterei di ricaricare la pagina non a tempo, ma solo se ci sono nuovi messaggi, in questo caso il TIC non sarebbe fastidioso ma servirebbe ad attirare l'attenzione.

Si può realizzare un JSCRIPT che esamina ad intervalli di 5 secondi l'APPLICATION dei messaggi e lancia il reload solo se ci sono variazioni?
38 messaggi dal 05 ottobre 2001
CREDO MI ABBIA TRATTO IN INGANNO QUESTO:
http://forum.aspitalia.com/forum/topic.aspx?PostID=171304#171304

E' Jscript lato SERVER vero?
11.886 messaggi dal 09 febbraio 2002
Contributi
che mitici utilizzano questo codice per inviare/ricevere nuovi messaggi senza ricaricare la pagina:

script.src = scriptUrl;
script.type = 'text/javascript';
script.defer = true;
script.id = 'lastLoadedCmds';
void(head.appendChild(script));

inseriscono dinamicamente degli script js nella pagina. Beh abbiamo scoperto una cosa nuova, neanche me l'ero mai immaginato che poteva essere fatto in questo modo...
Hai capito come funziona?
Loro passano il messaggio ad una pagina asp, che provvede ad inserirlo in una variabile application (credo che usino un dictionary). Questa pagina asp inoltre, legge tutti i nuovi messaggi e produce un output javascript (senza tag html).
Questo output aggiorna dinamicamente la cella che contiene i messaggi e può farlo perchè grazie allo script di sopra, che le permette di essere caricata essa stessa come script.
Almeno credo...

Enjoy learning and just keep making
38 messaggi dal 05 ottobre 2001
Avevo notato che i frame non fornivano i testi dei messaggi quindi i frame venivano caricati via jscipt e infatti tutte le pagine che dovrebbero fornire output presentano:

<script language="JavaScript1.2" type="text/javascript"
function init() {
refreshFunction = 'executeRequest(\'action=refresh\')';
eval(refreshFunction);
setInterval(refreshFunction, <%= (MESSAGES_REFRESH_RATE * 1000) %>);
}
</script>




poi il lavoro di aggiornamento lo fa questo script suppongo



<script language="JavaScript1.2" type="text/javascript"
var SERVER_CONTROLLER = "control.asp";

function executeRequest(params) {

var head = document.getElementsByTagName('head').item(0);
var old = document.getElementById('lastLoadedCmds');
if (old) head.removeChild(old);

script = document.createElement('script');

parameters = new String(params).split(',');

var scriptUrl = SERVER_CONTROLLER + '?rnd=' + Math.random();
for (var i = 0; i < parameters.length; i++) {
scriptUrl += "&" + parameters[i];
}

script.src = scriptUrl;
script.type = 'text/javascript';
script.defer = true;
script.id = 'lastLoadedCmds';

void(head.appendChild(script));

} // > function executeRequest(...)


/**
* Dynamically updates the content of a frame.
*
*/
function update(frame, id, html) {

var doc = eval(frame + '.document');

if (doc.layers) {
var l = doc[id];
l.document.open();
l.document.write(html);
l.document.close();
} else if (doc.all && doc.all[id]) {
doc.all[id].innerHTML = html;
} else if (doc.createRange) {
var l = doc.getElementById(id);
var r = doc.createRange();
while (l.hasChildNodes()) {
l.removeChild(l.lastChild);
}
r.setStartAfter(l);
var docFrag = r.createContextualFragment(html);
l.appendChild(docFrag);
}

} // > function update(...)


function updateMessages(id, html) {
update('parent.messages', id, html);
}
</script>


MA TUTTO CIO' VA OLTRE LA MIA ESPERIENZA, INFATTI NON CAPISCO COME VENGONO PESCATI I DATI DALLA APPLICATION


SI POTREBBE SEMPLIFICARE TUTTO QUESTO PER RENDERLO COMPRENSIBILE A MOLTI SE NON A TUTTI VISTO CHE SI TRATTA DI UN ARGOMENTO IRRISOLTO CHE HA RIGUARDATO MOLTI FORUM?
11.886 messaggi dal 09 febbraio 2002
Contributi
il punto da comprendere è solo uno, poi loro ci hanno ricamato intorno.
immagina di dover cominciare da 0. Hai bisogno di sole 2 pagine, entrambe asp:

A) chat.asp - contiene una textarea, una textbox e un bottone per l'invio del messaggio
B) messaggi.asp - è la pagina incaricata di ricevere il messaggio, memorizzarlo nella application e restituire quelli degli altri utenti.

Partiamo dal presupposto che sappiamo fare questa cosa (del resto l'hai sviluppata anche tu una chat, conosci il funzionamento) l'unica difficoltà è non far ricaricare la pagina.

in chat.asp, scrivi un messaggio nella textbox e clicca il tasto per inviare il messaggio. All'evento onClick del bottone metti questo codice:

<input type="button" value="invia" onClick="Javascript:inviamsg()">

<script language="Javascript">
function inviamsg(){
msg = document.forms[0].nometextbox.value

// da qui comincia il loro script
script = document.createElement('script');
var head = document.getElementsByTagName('head').item(0);
script.src = "messaggi.asp?msg=" + escape(msg)
script.type = 'text/javascript';
script.defer = true;
script.id = 'lastLoadedCmds';
void(head.appendChild(script));
}
</script>

A questo punto la metà del lavoro è fatta: hai inviato il messaggio alla pagina messaggi.asp aggiungendo (al runtime) alla tua pagina una riga come questa:
<script language="Javascript" src="messaggi.asp?msg=Ciao+a+tutti">
Questa riga è stata simulata dal codice là sopra. Adesso vediamo il contenuto di messaggi.asp

<%
Dim msg
msg = Request.QueryString("msg")
Application("messaggi") = Application("messaggi") & vbcrlf & msg
'un nuovo messaggio è stato inserito in coda
'adesso rimandiamo a chat.asp
'tutti i messaggi che si trovano nella application
%>
document.forms[0].nometextarea.value = "<%=Replace(Application("messaggi"), vbcrlf, "\n")%>"

Finito. Dovrebbe funzionare...

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.