Datenbankeintrag beim schliessen des Browsers / Tab ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbankeintrag beim schliessen des Browsers / Tab ?

    Hallo zusammen,

    ich versuche gearade mit meinen kaum vorhandenen Ajax-Kenntnissen eine "Wer ist online"-Funktion zu realisieren...Ich dachte mir, das es doch möglich sein müsste beim schliessen eines Tabs oder des ganzen Browserfensters nochmal eine Ajaxfunktion anzustossen die dann ein PHP-Script aufruft in dem dann einfach in der DB der onlinestatus geändert wird...

    Eine letzte Aktion kann man ja mit onUnload oder onBeforeUnload erreichen..
    Mein Script bringt mir aber in der Firefox Fehlerkonsole einen ziemlich wirren Fehler :

    Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMWindowInternal.alert]"
    nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame ::
    http://localhost/svo/Scripts/onlineStatus.js :: anonymous :: line 34" data: no]


    Mein Ajaxscript:

    HTML-Code:
    function setOnlineStatus(ostatus){
    				 //erstellen des requests
                     var req = null;
    
                    try{
                        req = new XMLHttpRequest();
                    }
                    catch (ms){
                        try{
                            req = new ActiveXObject("Msxml2.XMLHTTP");
                        } 
                        catch (nonms){
                            try{
                                req = new ActiveXObject("Microsoft.XMLHTTP");
                            } 
                            catch (failed){
                                req = null;
                            }
                        }  
                    }
    
                    if (req == null)
                          alert("Error creating request object!");
                      
                      //anfrage erstellen (GET, url ist localhost,
                      //request ist asynchron      
                      req.open("GET", '/svo/setOnlineStatus.php?s='+ostatus, true);
    				   //Beim abschliessen des request wird diese Funktion ausgeführt
                    req.onreadystatechange = function(){            
                        switch(req.readyState) {
                                case 4:
                                if(req.status!=200) {
                                    alert("Fehler:"+req.status); 
                                }else{    
                                    //alles gut...
    								}
                                break;
                        
                                default:
                                    return false;
                                break;     
                            }
                        };
      
                      req.setRequestHeader("Content-Type",
                                          "application/x-www-form-urlencoded");
                    req.send(null);
                }
    Wenn ich diesen Teil der Status-Überprüfung weglasse, bekomme ich den Fehler nicht mehr, aber es passiert auch nichts weiter...

    HTML-Code:
       //Beim abschliessen des request wird diese Funktion ausgeführt
                    req.onreadystatechange = function(){            
                        switch(req.readyState) {
                                case 4:
                                if(req.status!=200) {
                                    alert("Fehler:"+req.status); 
                                }else{    
                                    //alles gut...
    								}
                                break;
                        
                                default:
                                    return false;
                                break;     
                            }
                        };
    Ist mein Vorhaben eigentlich möglich oder brechen alle Script-Verarbeitungen beim schliessen sofort ab? Ich meine PHP ist ja serverseitg und es gelingt mir ja den Request zu erstellen und abzusenden...müsste dann doch eigentlich auch ausgeführt werden ?

    Danke für euere Hilfe !!

    LG
    Zuletzt geändert von ZuLtAn; 10.02.2011, 11:23.
    -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

  • #2
    Hallo,

    da der Request bei dir asynchron abläuft, existiert die Seite und das zugehörige Fenster in der onreadystatechange-Callback-Funktion schon gar nicht mehr, wenn der Browser eine Antwort erhält. Alternativen: keinen onreadystatechange-Callback verwenden und synchron arbeiten (3. Parameter von XMLHttpRequest).

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo Amica,

      vielen Dank für die Hilfe, das hat es gebracht ! Eigentlich super einfach, jetzt werden auch alle Sessionvars bereits beim verlassen der Seite gelöscht.

      LG
      -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

      Kommentar

      Lädt...
      X