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

    window.onunload funzione non eseguita

    Ciao a tutti,
    nel mio sito per fare in modo che quando l'utente chiude la pagina venga aggiornata la tabella degli utenti on line nel database del server ho aggiunto una funzione all'evento window.onunload
    ma non funziona. La funzione dovrebbe essere corretta perche se la faccio eseguire da un pulsante funziona correttamente.
    posto il codice:

    sulla pagina html:
    codice:
    <script type="text/javascript">
      	window.onunload = logOut('logout.php'+ '?nick=' + mioNome);
      </script>
    la funzione javascript:
    codice:
    function logOut (url) { 
      var chiamata = false;
      if(window.XMLHttpRequest){
      	chiamata = new XMLHttpRequest();
      	//chiamata.averrideMomeType("text/xml");
      } else if (window.ActiveXObject){
      	ActiveXObject("Microsoft.XMLHTTP");
      }
      if(chiamata){
      	chiamata.open("GET", url);
      	chiamata.onreadystatechange = function(){
      		if(chiamata.readyState === 4 &&
      			chiamata.status === 200){
      				//alert('logout eseguito');
      			}// fine if
      	}// fine funzione anonima
      	chiamata.send(null);
      }
    }
    la funzione php
    Codice PHP:
    <?php

        $giocatore_nick 
    $_GET["nick"];
        
        
    // connessione al server
        
    $connect mysql_connect("localhost""root""password")
        or die(
    "Qualcosa non va");
        
        
    // controllo database
        
    mysql_select_db("trisdb")
        or die(
    'database non aperto');
        
        
    $update "UPDATE giocatori
                SET giocatore_stato = 'Off Line'
                WHERE giocatore_nick = '
    $giocatore_nick'
                                "
    ;
        
    $results mysql_query($update) or
                    die (
    mysql_error());
                    
        
    //echo"logout eseguito con seccesso";
    ?>
    non so come debagare questa cosa perchè se la eseguo col pulsante funziona perfettamente.
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    questo
    window.onunload = logOut('logout.php'+ '?nick=' + mioNome);
    e' sintatticamente errato

    window.onunload = function(){logOut('logout.php'+ '?nick=' + mioNome);}

    che tecnicamente poi funzioni e' tutto da vedere
    ciao

  3. #3
    Originariamente inviato da Xinod
    questo
    window.onunload = logOut('logout.php'+ '?nick=' + mioNome);
    e' sintatticamente errato

    window.onunload = function(){logOut('logout.php'+ '?nick=' + mioNome);}

    che tecnicamente poi funzioni e' tutto da vedere
    ciao
    Ho provato ma non funziona lo stesso.
    Tecnicamente è una brutta soluzione?
    Ho provato in questo modo perché l'ho travato come suggerimento in alcuni tutorial sul web
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Se usi ajax + onunload (ma ti conviene onbeforeunload - per cui vale però lo stesso discorso) devi ricorrere all'odiatissimo uso sincrono di XMLHttpRequest. Sorry, non hai alternative.

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Per farti capire…

    JavaScript:
    codice:
    window.onbeforeunload = function () {
    	var oReq = new XMLHttpRequest();
    	oReq.open("GET", "logout.php?nick=" + escape(mioNome), false);	// synchronous request
    	oReq.send(null);
    	if (oReq.responseText.trim() !== "logout eseguito con successo"); {
    		return "Non \u00E8 stato possibile eseguire il logout. Si desidera procedere manualmente?";
    	}
    };
    PHP:
    Codice PHP:
    <?php
        $giocatore_nick 
    $_GET["nick"];
        
        
    // connessione al server
        
    $connect mysql_connect("localhost""root""password")
        or die(
    "Qualcosa non va");
        
        
    // controllo database
        
    mysql_select_db("trisdb")
        or die(
    "database non aperto");
        
        
    $update "UPDATE giocatori
                SET giocatore_stato = 'Off Line'
                WHERE giocatore_nick = '
    $giocatore_nick'
                                "
    ;
        
    $results mysql_query($update) or
                    die (
    mysql_error());
                    
        echo 
    "logout eseguito con successo";
    ?>
    (ho decommentato l'echo e corretto "seccesso" in "successo")


  6. #6
    GRAZIE !!!
    la tua risposta è stata molto interessante e gentile.
    La provo subito
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  7. #7
    Funziona benissimo
    all'odiatissimo uso sincrono di XMLHttpRequest.
    perche dici che è odiatissimo?

    Ritieni che queste tecniche ajax non siano "tecnicamente" tanto comode?

    @carlomarx grazie ancora per il tuo prezioso aiuto
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  8. #8
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da clingonboy
    Funziona benissimo

    perche dici che è odiatissimo?

    Ritieni che queste tecniche ajax non siano "tecnicamente" tanto comode?

    @carlomarx grazie ancora per il tuo prezioso aiuto
    Figurati
    Odiatissimo è l'uso sincrono di XMLHttpRequest (che però è l'unica possibilità a disposizione in un caso come il tuo). Questo perché in caso di connessione lenta l'utente avrà il browser impallato fin quando non riceverà una qualche risposta dal server. Ma dipende anche dai browsers.

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.