Buongiorno a tutti :P e no, non è la solita richiesta di come si costruisce una Chat di quel tipo, quello di cui ho bisogno è tutt'al più il parere di qualche esperto nel campo per poter migliorare quella che è l'applicazione che ho sviluppato, mi spiego meglio:
- La Chat è sviluppata su un sistema di chiamate asincrone, il response che ne viene dato viene passato sotto il controllo di un valore, se il valore è di un dato tipo allore restituirà una formattazione del messaggio, se è di un altro una formattazione diversa.
Ora, con questo codice ho avuto due utenti che hanno riscontrato problemi sull'auto refresh della chat, lamentando problemi al visualizzare i messaggi nuovi, proprio per questo mi interesserebbe un parere di "ottimizzazione" dell'applicazione. Posto parte del codice.
Non so se può servire a questo punto anche la parte di codice php che da una risposta con json, nel caso lo posto ^^codice:<script language="JavaScript" type="text/javascript"> var sendReq = getXmlHttpRequestObject(); var receiveReq = getXmlHttpRequestObject(); var lastMessage = 0; var mTimer; //Funzione che inizializza la chat function startChat() { //Setta il focus sul box di testo. document.getElementById('txt_message').focus(); //Avvia la ricezione dei messaggi. getChatText(); } //Da le specifiche del browser su XmlHttpRequest function getXmlHttpRequestObject() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if(window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } else { document.getElementById('p_status').innerHTML = 'Status: Cound not create XmlHttpRequest Object. Consider upgrading your browser.'; } } //Mostra i messaggi ricevuti dal server function getChatText() { if (receiveReq.readyState == 4 || receiveReq.readyState == 0) { receiveReq.open("GET", 'getChat.php?chat=<?=$Stanza?>&last=' + lastMessage, true); receiveReq.onreadystatechange = handleReceiveChat; receiveReq.send(null); } } //Invia i messaggi al server. function sendChatText() { if (sendReq.readyState == 4 || sendReq.readyState == 0) { sendReq.open("POST", 'getChat.php?chat=<?=$Stanza?>&last=' + lastMessage, true); sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sendReq.onreadystatechange = handleSendChat; var param = 'message=' + document.getElementById('txt_message').value; param += '&tipo=' + document.getElementById('tipo_mex').value; param += '&loca=' + document.getElementById('text_lcz').value; param += '&chat=<?=$Stanza?>'; sendReq.send(param); document.getElementById('txt_message').value = ''; } } //Se il messaggio è stato inviato correttamente aggiorna la pagina. function handleSendChat() { //Pulisce il time esistente per non avere istanze multiple in corso. clearInterval(mTimer); getChatText(); } function handleReceiveChat() { if (receiveReq.readyState == 4) { //Incentra la ricezione dei messaggi e visualizzazione sul div var chat_div = document.getElementById('div_chat'); var response = eval("(" + receiveReq.responseText + ")"); for(i=0;i < response.messages.message.length; i++) { if (response.messages.message[i].tipo == '2') { chat_div.innerHTML += '<fieldset><legend>Master Fato</legend><div class="master" title="' + response.messages.message[i].user + '"><center>' + response.messages.message[i].text + '</center></div></fieldset>'; chat_div.scrollTop = chat_div.scrollHeight; } else if (response.messages.message[i].tipo == '3') { chat_div.innerHTML += '<fieldset><legend>Moderazione</legend><div class="mod"><center>' + response.messages.message[i].text + '</center></div></fieldset>'; chat_div.scrollTop = chat_div.scrollHeight; } else if (response.messages.message[i].tipo == '1') { chat_div.innerHTML += '<fieldset><legend><font class="chat_time">' + response.messages.message[i].time + '</font>[img]' + response.messages.message[i].simbolo + '[/img]' + response.messages.message[i].user + '</legend><div class="azione">[' + response.messages.message[i].lcz + ']' + response.messages.message[i].text + '</div></fieldset>'; chat_div.scrollTop = chat_div.scrollHeight; } else if ((response.messages.message[i].tipo == '4') && (response.messages.message[i].desti == '<?= $Login ?>')) { chat_div.innerHTML += '<div class="susstu"><font class="chat_time">' + response.messages.message[i].time + '</font>' + response.messages.message[i].user + ' ti ha sussurrato:' + response.messages.message[i].text + '</div>'; chat_div.scrollTop = chat_div.scrollHeight; } else if ((response.messages.message[i].tipo == '4') && (response.messages.message[i].user == '<?= $Login ?>')) { chat_div.innerHTML += '<div class="susstu"><font class="chat_time">' + response.messages.message[i].time + '</font>' + response.messages.message[i].user + 'hai sussurrato a' + response.messages.message[i].desti + ':' + response.messages.message[i].text + '</div>'; chat_div.scrollTop = chat_div.scrollHeight; } lastMessage = response.messages.message[i].id; } mTimer = setTimeout('getChatText();',1000); //Aggiorna la pagina ogni 2 secondi } } function blockSubmit() { sendChatText(); return false; } function resetChat() { if (sendReq.readyState == 4 || sendReq.readyState == 0) { sendReq.open("POST", 'getChat.php?chat=<?=$Stanza?>&last=' + lastMessage, true); sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sendReq.onreadystatechange = handleResetChat; var param = 'action=reset'; sendReq.send(param); document.getElementById('txt_message').value = ''; } } function handleResetChat() { document.getElementById('div_chat').innerHTML = ''; getChatText(); } function getSusText() { document.getElementById('txt_message').value = '@Destinatario@Testo'; } </script> </head> <body onLoad="javascript:startChat();"> <div id="div_chat" style="height: 90%; width: 100%; overflow: auto; background-color: #C8B998;"> <form id="frmmain" name="frmmain" onSubmit="return blockSubmit();"> <input type="image" src="img/pulsanti/refresh.png" name="btn_get_chat" id="btn_get_chat" value="Refresh Chat" onClick="javascript:getChatText();" /><input type="image" src="img/pulsanti/descrizione.png" name="btn_get_desc" id="btn_get_desc" value="Descrizione Luogo" onClick="javascript:desc('descluogo.php?st=<?=$Stanza?>','Descrizione Luogo');"> <select name="tipo_mex" id="tipo_mex"> <option value="1">Normale</option> <option value="4" onClick="javascript:getSusText();">Sussurro</option> <? if ($_SESSION['master'] > '0') { ?> <option value="2">Master</option> <option value="3">Moderazione</option> <? } ?> </select><input type="text" id="text_lcz" title="Locazione" name="text_lcz" style="width:70px;"> <input type="text" id="txt_message" name="txt_message" style="width: 400px;" /> <input type="image" src="img/pulsanti/invia.png" name="btn_send_chat" id="btn_send_chat" value="Send" onClick="javascript:sendChatText();" /> <input type="image" src="img/pulsanti/pulisci.png" size="4" title="Pulisci Chat" name="btn_reset_chat" id="btn_reset_chat" value="P" onClick="javascript:resetChat();" /> </form>
Grazie comunque della disponibilità!

 
			
			 
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando