Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Chat javascript + ajax

  1. #1

    Chat javascript + ajax

    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.

    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>
    Non so se può servire a questo punto anche la parte di codice php che da una risposta con json, nel caso lo posto ^^

    Grazie comunque della disponibilità!

  2. #2
    Nessuno che sa darmi nemmeno un qualche tipo di consiglio?>_< please.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.