Variable in Ajax in Javascript nicht bekannt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Variable in Ajax in Javascript nicht bekannt

    Hallo

    ich sende in einer JavaScript Funktion einen AJAX Request und Anhang der Rückgabe will ich rückgabe der ganzen Funktion steuern
    die funktion prüft, ob ein benutzername schon vorhanden ist und ob die eingabe überhaupt akzeptabel ist

    mein code:

    Quellcode

    1. function username_exists(){
    2. var username = document.register_formular.register_username;
    3. if(username.value.length<3 || username.value.length>32|| !isNaN(username.value)){
    4. document.getElementById('error_message_register').innerHTML='Bitte &uuml;berpr&uuml;fe Deine Eingabe f&uuml;r den Benutzernamen!<br />Der Benutzername muss 3 bis 32 Zeichen lang sein und darf nicht nur aus Zahlen bestehen!';
    5. return false;
    6. }
    7. var req;
    8. try{
    9. req = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
    10. }catch(e){
    11. }
    12. req.onreadystatechange = function() {
    13. if((req.readyState == 4) && (req.status == 200)){
    14. var rueckgabe = req.responseText;
    15. if(rueckgabe=="0"){
    16. document.getElementById("error_message_register").innerHTML = "Benutzername vergeben!";
    17. document.getElementsById('username_crc').innerHTML="0";
    18. }else if(rueckgabe=="1"){
    19. document.getElementsById('username_crc').innerHTML="1";
    20. }else{
    21. document.getElementById("error_message_register").innerHTML = "Fehler bei Benutzer&uuml;berpr&uuml;fung!<br />Bitte Kontaktiere Rusic.de Team &uuml;ber das Kontaktformular!";
    22. document.getElementsById('username_crc').innerHTML="0";
    23. }
    24. }
    25. }
    26. req.open('GET', 'content/register_ajax.php?username='+username.value);
    27. req.send(null);
    28. alert(document.getElementsById('username_crc').innerHTML);
    29. return backgabe;
    30. }
    Alles anzeigen


    ich habe es zuerst anstatt "document.getElementsById('username_crc').innerHTML="0";" mit return ture/false versucht
    jetzt habe ich extra div container angelegt, der einen wert zwischen speichert

    erfolglos

    wenn der oberer code zugreift
    if(username.value.length<3 || username.value.length>32|| !isNaN(username.value)){
    kriege ich false zurück
    dieser text "document.getElementById("error_message_register").innerHTML = "Benutzername vergeben!";" wird ebenfalls per ajax eingeblendet

    aber wenns rueckgabe=="1" ist, kriege ich undefined als rückgabewert X(

    habe schon mit globaler variable versucht, kommt immer der vordefinierter wert raus

    die php datei:

    Quellcode

    1. include '../functions/connection.php';
    2. include '../functions/php/doc1.php';
    3. if($_GET['username']){
    4. $stringmatch=sendquery("SELECT ID FROM user WHERE LOWER(Benutzername)='".strtolower($_GET['username'])."'", 3, 1);
    5. if($stringmatch!=""){
    6. print("0");
    7. }else{
    8. print("1");
    9. }
    10. }elseif($_GET['email']){
    11. $stringmatch=sendquery("SELECT ID FROM user WHERE LOWER(Email)='".strtolower($_GET['email'])."'", 3, 1);
    12. if($stringmatch!=""){
    13. print("1");
    14. }else{
    15. print("0");
    16. }
    17. }
    Alles anzeigen


    die includeten seiten geben nichts aus!
  • ajax ist asynchron

    ajax sendet asynchron. Nachdem du req.send(null); aufrufst kann es also noch x Sekunden dauern bis req.onreadystatechange ausgeführt wird.
    Der alert nach send wird jedoch sofort ausgeführt.

    Ich quote mal einen anderen Thread: AJAX: Passwort ändern funktion
    das geht nicht. Der "A"JAX erfolgt asynchron [..]

    Ist die asynchrone Anfrage im Hintergrund irgendwann fertig, dann ruft diese eine Callback Funktion auf.
    Siehe dazu noch: [wiki]AJAX Hintergrundwissen[/wiki]

    Ich möchte der Vollständigkeit halber mal einen Link ergänzen der erklärt wie dein Problem "synchron" zu lösen ist: hunlock.com/blogs/Snippets:_Synchronous_AJAX
    Verwendest du den 3ten Parameter false AJAX.open("POST", url, false); könntest du also statt return false direkt ein return AJAX.responseText machen. [...]

    Asynchrone Aufrufe arbeiten wie gesagt mit callback Methoden (setrequesthandler = callback). Diese werden ausgeführt, wenn der server eine Antwort produziert hat.
    Die Logik wandert in JavaScript - du sendest das Formular also nicht ab wie normalerweise - sondern du extrahierst die Daten und sendest sie via AJAX. (getFormData, ...)