Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    messaggi privati sincroni

    Ciao a tutti io ho un sistema di messaggi privati implementato con mysql e php e funziona perfettamente l'unico problema è che è asincrono, cioè se io mando un messaggio all'utente pippo e pippo non refresha non sa che gli ho mandato un messaqggio.

    So che per risolvere questo problema si può utilizzare ajax ma non so in che modo, so che ajax può fare dei controlli ogni secondo sul database per vedere se sono arrivati nuovi messaggi ma di nuovo non so come fare dato che di ajax non so niente chiedo aiuto magari se qualcuno conosce una guida....

  2. #2
    Semplicemente dovrai richiamare la funzione che controlla se ci sono nuovi messaggi ogni tot di tempo, ma mi sa che questa discussione è più js che php...

    Per esempio in passato, usando prototype, avevo scritto qualcosa del genere:

    codice:
    /**
     * riceve i messaggi della chat via AJAX
     * richiama ricorsivamente la stessa funzione
     * ogni secondo per aggiornare i messaggi
     */
    function getMessages()
    {
    	new Ajax.Request('tuo-script.php',
    			  {
    			    requestHeaders: {Accept: 'application/json'},
                                parameters: {id_last_message : $('message_id_last_message').value,
                                             id_chatroom : $('message_id_chatroom').value
                                            },
                                onSuccess: function(transport){                                
                                    var json = transport.responseText.evalJSON(true);
    
                                    //aggiorno la lista con i messaggi
                                    json.messages.each(function (n)
                                    {
                                        spanElement = new Element('span');
                                        spanElement.update(n.username+': ');
    
                                        liElement = new Element('li');
                                        liElement.update(spanElement).insert(n.data.sub(':)', ' [img]/images/smiley_30x30.png[/img]'));
    
                                        $('messages').insert( { bottom: liElement } );
    
                                        //scrolla in basso il div
                                        $('chat').scrollTop = $('chat').scrollHeight;
    
                                    });
    
                                    //aggiorno la chat ogni secondo
                                    window.setTimeout( getMessages, 1000 );
    
                                    //aggiorno il campo hidden con l'ultimo id
                                    //se json non è vuoto
                                    if(json.messages.lenght!=0)
                                    {
                                      $('message_id_last_message').value = json.messages[0].id
                                    }
    			    },
    			    onFailure: function(){ alert('Si è verificato un errore...'); }
    			  });
                              
    }
    quindi tuo-script.php farà una query al db per vedere se ci sono messaggi più recenti dell'id dell'ultimo messaggio e restituirà i risultati in JSON. Infine prototype aggiornerà la pagina con gli ultimi messaggi...


    Vedi se può esserti utile...
    Disegnatori e romanzieri d'Italia, visitate il mio sito, cerchiamo favolieri dark ed illustratori dark fantasy... http://www.neilgaimania.it

  3. #3
    allora i parametri che hai messo sono i campi della tabella?
    io eseguo la query sulla tabella messaggi, se nel campo letto c'è false faccio apparire un alert quindi metto onSuccess: alert('nuovo messaggio') se faccio così è giusto o devo cambiare qualcosa

  4. #4
    allora i parametri che hai messo sono i campi della tabella?
    si

    io eseguo la query sulla tabella messaggi, se nel campo letto c'è false faccio apparire un alert quindi metto onSuccess: alert('nuovo messaggio') se faccio così è giusto o devo cambiare qualcosa
    fai una query per vedere se ci sono messaggi nuovi, se li trovi li aggiungi tramite Jquery nel template della chat. Se non ce ne sono non fai nulla.

    Nel mio codice l'alert serve solo nel caso in cui qualcosa sia andato storto, tipo errori lato server (nella query o che so io)...

    Disegnatori e romanzieri d'Italia, visitate il mio sito, cerchiamo favolieri dark ed illustratori dark fantasy... http://www.neilgaimania.it

  5. #5
    scusa per il ritardo ma ho potuto risponderti solo adesso.... io purtropppo di ajax json protoype non so veramente niente però in sti giorni ho letto in giro....
    questo è il mio file php lo chiamo up_mess.php
    Codice PHP:
    session_start();  
    $Userid $_SESSION['user_id'];
    $qmess =  "SELECT COUNT(*) FROM t_messaggi WHERE ID_Destinatario=$Userid AND Letto='0'";
    $mess mysql_query($qmess)  or die(mysql_error());
    $mess mysql_fetch_array($mess); 
    questo invece è il tuo codice modificato da me (ma che non funziona)
    Codice PHP:
    function getMessages() { 
    new 
    Ajax.Request('up_mess.php',
                   { 
    requestHeaders: {Accept'application/json'}, 
                                 
    parameters: {mess : $('mess').value },  
                               
    onSuccess: function(transport){     
                                                                
    var 
    json transport.responseText.evalJSON(true);                                  

    json.messages.each(function (n)                                 
    {                                    
    if(
    mess[0]==0)//se il risultato della query è 0 vuol dire che non ci sono nuovi messaggi
    {
    document.write('Messaggi');   
    }                                   
    else
    //altrimenti se il risulato è 1 ci sono nuovi messaggi e visualizzo [new]
    {
    document.write('Messagg[NEW]');  
    }  
    //aggiorno la chat ogni secondo                                 
    window.setTimeoutgetMessages1000 );                                  
        
    },
    onFailure: function(){ alert('Si è verificato un errore...'); }               
    });                           
     } 
    spero tu riesca a risolvere il mio problema io purtropoo non ci capisco molto....

  6. #6
    Guarda ti dò un consiglio, potresti fare così con jquery e js

    codice:
    function start(){
       $("#div").load('pagina da caricare.php');
    }
    setInterval("start()", 100);
    La funziona load() cariac un pagina php che mostra nel #div ogni 100 millisecondi..Se sei interessato usala =)
    Che mondo sarebbe senza Nutella.

    PHP/MYSQL/HTML/CSS/JAVASCRIPT

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.