ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
405
405
EMPFEHLEN
-
14.01.10 00:03 #1
- 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
-
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.
-
14.01.10 19:46 #3Maik 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
-
14.01.10 21:00 #4
- 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
-
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.
-
15.01.10 22:42 #6
- 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
-
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:...an dieser Stelle kannst du tun, was du damit tun möchtest....vorher nicht.Code :1
/* alert(checkVar); hier ausgabe test*/
Ähnliche Themen
-
ajax fehler popup
Von Zack im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 15.05.09, 18:24 -
JS im return von ajax wird nicht ausgeführt.
Von Nord-Süd-Richtung im Forum Javascript & AjaxAntworten: 8Letzter Beitrag: 05.12.08, 23:43 -
Ajax Sonderzeichen Fehler
Von RaVenC im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 20.06.08, 12:42 -
Ajax - Fehler in Firefox und IE
Von flooo im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 11.06.06, 11:01 -
return ResultSet Fehler in DB Klasse
Von mchashi im Forum JavaAntworten: 3Letzter Beitrag: 03.12.04, 21:11





Zitieren

Login




