tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
405
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    totalNooob totalNooob ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    3
    hallo forum,

    ich bin ajax anfänger und weis einfach nicht mehr weiter. ich habe folgendes problem:
    die javascript funktion nicknameValidation() ruft die datei test2.php auf und bekommt 0 oder 1 zurück.

    bedingung wenn NULL, dann soll die variable "checkVar" auf 11 gesetzt werden andernfalls auf 22 und anschließend "checkVar" mit return zurückgeben.
    eigentlich ganz einfach aber ich finde den fehler einfach nicht, zumal es mal funktioniert hat. der übersichtlichkeit und fürs bugfinding habe ich alles unwesendliche schon zuvor rausgefiltert. mein code sieht folgendermaßen aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    
     
     
    <html>
        <head>
            <title>test</title>
            <script type="text/javascript">
                function nicknameValidation(){
                        var checkVar = 0;
                        
                                    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!");
                     
                                        req.open("GET", "test2.php?test=1", true);
                                    
                    
                                    req.onreadystatechange = function(){ 
                                    
                                        
                                        switch(req.readyState) {
                                                case 4:
                                                if(req.status!=200) {
                                                    alert("Fehler:"+req.status); 
                                                }else{    
     
                                                    var nick = req.responseText;
                                                    
                                                    
                                                    
                                                    if(nick==true){
                                                        
                                                        checkVar=11;
                                                                 
                                                        
                                                    }else {
                                                        
     
                                                        checkVar=22;
     
                                                    }
                                                    
                                                 /* alert(checkVar); hier ausgabe test*/
                                                 /* return checkVar;*/
                                                    
                                                   
                                                }
                                                break;
                                        
                                                default:
                                                  /* alert("fehler default"); */
                                                  
                                                break;     
                                            }
                                        };
                      
                                      req.setRequestHeader("Content-Type",
                                                          "application/x-www-form-urlencoded");
                                    req.send(null); 
                            
                        /* return checkVar;*/
                        return checkVar;
                    }
            </script>
        </head>
        <body>
            <script language="javascript">
                
                var nick = nicknameValidation();
                alert(nick);
                
                /* hier sollte eigentlich nick = 11 oder 22 sein, 
                stattdessen ist checkVar immer NULL und wenn ich 
                var checkVar = 0; ganz am anfang der funktion rausnehme, 
                dann ist checkVar "undefined" 
                
                wenn ich mir checkVar per alert ausgeben lasse ( stelle:ausgabe test), 
                dann ist checkVar richtig gesetzt. nämlich 11 oder 22
                */
                
                
            </script>
        </body>
    </html>
     
    Vielen Dank schonmal im vorraus
    mfg
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    du kannst den Rückgabewert von nicknameValidation() nicht direkt verarbeiten.

    Ursache: dein HTTPRequest erfolgt asynchron, was bedeutet, dass Skripte weiter abgearbeitet werden, während der Request noch nicht abgeschlossen ist.
    Die Funktion wird also beendet(und gibt den voreingestellten Wert zurück, falls vorhanden)....ohne dass die Antwort vom Server bereits erfolgt ist.

    Wenn du später im alert() den korrekten Wert bekommst, dürfte der Request abgeschlossen sein.

    Lösung: das, was du mit der Antwort vom Server machen willst, müsstest du in der req.onreadystatechange-Funktion erledigen, dort hast du beim readyState 4 die Serverantwort verfügbar.

    Alternativ könntest du zwar den Request synchron starten (indem du den 2.Parameter von req.open auf false setzt) ...das wäre aber nicht unbedingt empfehlenswert, weil das den Browser unbenutzbar macht, bis die Antwort vom Server erhalten wurde.
     

  3. #3
    Maik Tutorials.de Gastzugang
    Hi,

    und beachte in deinen zukünftigen Beiträgen bitte die Netiquette (Nr.15) bzgl. deiner durchgängigen Kleinschreibung, die in unserem Forum nicht erwünscht ist, und der du mit deiner Registrierung zugestimmt hast - vielen Dank!

    mfg Maik
     

  4. #4
    totalNooob totalNooob ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    3
    Hallo Sven,
    vielen Dank für deine Antwort.
    Leider habe ich deine Lösung noch nicht ganz verstanden.

    So wie es aussieht, wird die Serverantwort doch bereits in der Funktion req.onreadystatechange ausgeführt.
    Und mit CASE 4: auf readyState gewartet. Kannst du mir ein kleines Beispiel dazu geben?

    Vielen Dank nochmals
    mfg
     

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von totalNooob Beitrag anzeigen

    So wie es aussieht, wird die Serverantwort doch bereits in der Funktion req.onreadystatechange ausgeführt.
    Und mit CASE 4: auf readyState gewartet. Kannst du mir ein kleines Beispiel dazu geben?
    Sie wird nicht "bereits" ausgeführt, sondern erst.

    Dass du die Überwachung des onreadystatechange-Events innerhalb der Funktion nicknameValidation() initialisierst, bedeutet nicht, dass der Eintritt des onreadystatechange-Events in irgendeiner Beziehung zur Funktion nicknameValidation() steht.
    Dieser Event feuert irgendwann...und wann, das bestimmt alleinig der Server.
     

  6. #6
    totalNooob totalNooob ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    3
    Hallo Sven,
    kannst du mir ein Beispiel geben wie ich die Beziehung zwischen nicknameValidation() und dem onreadystatechange-Events aufbaue und abfrage wann der Server antwortet?
    Wie gesagt es hatte bei mir so schon mal funktioniert und ich in der zwischenzeit habe ich nichts verändert. Es sei denn ich "schlafwandel" Nachts (bin mir nicht mehr ganz sicher)

    nochmals vielen Dank das Du dir die Zeit genommen hast.
    lg
     

  7. #7
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Sofern du den Request nicht synchron vornimmst(was auch wie erwähnt nicht empfehlenswert wäre), kannst du da keine Beziehung aufbauen.

    Hier hast du das gewünschte Ergebnis verfügbar:
    Code :
    1
    
    /* alert(checkVar); hier ausgabe test*/
    ...an dieser Stelle kannst du tun, was du damit tun möchtest....vorher nicht.
     

Ähnliche Themen

  1. ajax fehler popup
    Von Zack im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 15.05.09, 18:24
  2. JS im return von ajax wird nicht ausgeführt.
    Von Nord-Süd-Richtung im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 05.12.08, 23:43
  3. Ajax Sonderzeichen Fehler
    Von RaVenC im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 20.06.08, 12:42
  4. Ajax - Fehler in Firefox und IE
    Von flooo im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 11.06.06, 11:01
  5. return ResultSet Fehler in DB Klasse
    Von mchashi im Forum Java
    Antworten: 3
    Letzter Beitrag: 03.12.04, 21:11

Stichworte