tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
300
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jan 2004
    Ort
    Hamburg
    Beiträge
    8
    Hallo,

    ich habe ein Problem mit meinem Script, welches ein Anmeldeformular checkt und dann abschicken soll.
    Standardabfragen, ob Felder ausgefüllt sind, sind kein Problem.
    Aber danach möchte ich über Ajax checken, ob der Username oder die Email-Adresse schon vergeben sind.

    Wenn auch das passt, soll das Forumar abgeschickt werden. Allerdings tut er das nicht, da ich am ende 'return false' gesetzt habe.
    Dies muss ich aber, da er das Formular sonst abschicken würde, ohne das Ajax-Script auszuführen.

    Anbei nun mein Code.
    Ich habe ein paar alerts eingefügt, um die Reihenfolge des Ablaufs zu prüfen.
    Wenn alle eingaben Stimmen ist das die Reihenfolge: 1,6,2,3

    Codeschnipsel (als PHP, damit es schön bunt ist ):
    PHP-Code:
    $("#register_form").submit(function(){
        var 
    nickname = $("#DNickname").attr("value");
        var 
    email = $("#eMail").attr("value");
        var 
    password = $("#Password").attr("value");
        var 
    day = $(".Tag");
        var 
    month = $(".Monat");
        var 
    year = $(".Jahr");
        var 
    tag '';
        var 
    monat '';
        var 
    jahr '';
        var 
    gender = $("#gender")[0].selected;
        var 
    agb = $("#AGB")[0].checked;
        var 
    fehler '';
        for(var 
    0day.lengthi++){
            if(
    day[i].selected==true) {
                
    tag day[i].value;
            }
        }
        for(var 
    0month.lengthi++){
            if(
    month[i].selected==true) {
                
    monat month[i].value;
            }
        }
        for(var 
    0year.lengthi++){
            if(
    year[i].selected==true) {
                
    jahr year[i].value;
            }
        }
        if(
    nickname == ''){ fehler += '<li>Bitte gin einen Nicknamen ein</li>'; }
        if(
    email == ''){ fehler += '<li>Gib bitte eine Email-Adresse an</li>'; }
        if(
    password == ''){ fehler += '<li>Bitte gib ein Passwort ein</li>'; }
        if(
    tag == '' || monat == '' || jahr == ''){ fehler += '<li>Bitte gib dein Geburtsdatum ein</li>'; }
        if(
    tag == 31 && (monat == || monat == || monat == || monat == || monat == 11)){ fehler += '<li>Das Geburtsdatum ist ung&uuml;ltig</li>'; }
        if(
    gender == true){ fehler += '<li>Bitte gib ein Geschlecht an</li>'; }
        if(
    agb == false){ fehler += '<li>Du musst die AGB\'s annehmen</li>'; }

        
    alert('1');
        
        if(
    fehler == ''){
            $.
    ajax({
                
    type"POST"url"/ajax_reloader/register_check.php"data"action=check&email=" email "&nickname=" nickname,
                
    complete: function(data){
                    
    alert('2');
                    if(
    data.responseText == 'okay'){
                        
    alert('3');
                        return 
    true;
                    }else{
                        
    alert('4');
                        $(
    "ul#Fehler > li").remove();
                        $(
    "ul#Fehler").append(data.responseText);
                    }
                }
            });
        }else{
            
    alert('5'+fehler);
            $(
    "ul#Fehler > li").remove();
            $(
    "ul#Fehler").append(fehler);
        }
        
    alert('6');
        return 
    false;

    }); 
    Nun die Frage: Warum überspringt er erst den Ajax-Code? Und wieso schickt er das Formular dann nicht ab, obwohl ich direkt nach alert('3'); return true ausgebe?

    Danke für Eure Hilfe
    Martin
     
    Die Intelligenz verfolgt mich, aber ich bin schneller!

  2. #2
    DeluXe DeluXe ist offline Funkjoker
    Registriert seit
    Jul 2004
    Ort
    Offenburg
    Beiträge
    847
    Zitat Zitat von Martin Schneider Beitrag anzeigen
    Nun die Frage: Warum überspringt er erst den Ajax-Code? Und wieso schickt er das Formular dann nicht ab, obwohl ich direkt nach alert('3'); return true ausgebe?
    Welche altert's kommen denn derzeit?
    Es ist zwar gut zu wissen, was kommen sollte - nur besser wäre noch zu wissen, was tatsächlich kommt.

    Hast du dir den Inhalt von data mal ausgeben lassen? Steht in data.responseText wirklich "okay"? Wird wenigstens der else-Zweig ausgeführt?

    Am besten einfach mal ein console.log( data ); machen, natürlich in Verbindung mit Firebug.
     
    mfg

    DeluXe

  3. #3
    Registriert seit
    Jan 2004
    Ort
    Hamburg
    Beiträge
    8
    Zitat Zitat von DeluXe Beitrag anzeigen
    Welche altert's kommen denn derzeit?
    Es ist zwar gut zu wissen, was kommen sollte - nur besser wäre noch zu wissen, was tatsächlich kommt.

    Hast du dir den Inhalt von data mal ausgeben lassen? Steht in data.responseText wirklich "okay"? Wird wenigstens der else-Zweig ausgeführt?

    Am besten einfach mal ein console.log( data ); machen, natürlich in Verbindung mit Firebug.
    Hallo,

    danke für die schnelle Antwort.
    Wie schon geschrieben kommen folgende alerts: 1,6,2,3
    Das heißt, dass er den else-Zweig ausführt, aber das Formular dann nicht abschickt, obwohl return true ausgegeben wird.
     
    Die Intelligenz verfolgt mich, aber ich bin schneller!

  4. #4
    DeluXe DeluXe ist offline Funkjoker
    Registriert seit
    Jul 2004
    Ort
    Offenburg
    Beiträge
    847
    Ach so meinst du das, ich habe das eben anders verstanden.

    Das Problem ist, dass $.ajax sich nicht auf $.submit bezieht und man somit auch keinen Wert zurückgeben kann.

    Der einfachste Weg wäre wohl, an Stelle des return true; einfach nochmal jQuery( this ).submit() zu schreiben.

    Das eigentliche Submit-Event hast du ja mit dem return false; (Sprich alert 6) schon abgebrochen.
     
    mfg

    DeluXe

  5. #5
    Registriert seit
    Jan 2004
    Ort
    Hamburg
    Beiträge
    8
    Zitat Zitat von DeluXe Beitrag anzeigen
    Ach so meinst du das, ich habe das eben anders verstanden.

    Das Problem ist, dass $.ajax sich nicht auf $.submit bezieht und man somit auch keinen Wert zurückgeben kann.

    Der einfachste Weg wäre wohl, an Stelle des return true; einfach nochmal jQuery( this ).submit() zu schreiben.

    Das eigentliche Submit-Event hast du ja mit dem return false; (Sprich alert 6) schon abgebrochen.
    Das funktioniert leider nicht.
    ist this in dem Fall nicht das Formular? Damit würde doch die submit-funktion wieder greifen, oder?

    Also im Moment habe ich vor jQuery( this ).submit() noch ein alert gesetzt. Dieses bekomme ich ausgegeben und dann passiert nichts...

    Ich hoffe, du hast noch andere Lösungsvorschläge
    Würde es was bringen, die Ajax-Funktion in eine extra funktion zu packen, die das ergebnis zurückgibt? dann könnte ich damit doch abfragen, ob er 'okay' zurückgibt und damit den wert für return steuern!?

    War das Verständlich?
     
    Die Intelligenz verfolgt mich, aber ich bin schneller!

  6. #6
    DeluXe DeluXe ist offline Funkjoker
    Registriert seit
    Jul 2004
    Ort
    Offenburg
    Beiträge
    847
    Zitat Zitat von Martin Schneider Beitrag anzeigen
    Würde es was bringen, die Ajax-Funktion in eine extra funktion zu packen, die das ergebnis zurückgibt?
    Nein, da du auch dann wieder darauf angewiesen wärst, dass $.ajax etwas zurück gibt.

    Aber stimmt, du bist zu dem Zeitpunkt schon wieder in einem ganz anderen Scope, zumal der zeitliche Versatz auch noch hinzu kommt.

    Dann musst du innerhalb der submit-Methode var form = jQuery( this ); hinzufügen und später einfach auf form.submit() zugreifen, das sollte tun.
     
    mfg

    DeluXe

  7. #7
    Registriert seit
    Jan 2004
    Ort
    Hamburg
    Beiträge
    8
    Zitat Zitat von DeluXe Beitrag anzeigen
    Nein, da du auch dann wieder darauf angewiesen wärst, dass $.ajax etwas zurück gibt.

    Aber stimmt, du bist zu dem Zeitpunkt schon wieder in einem ganz anderen Scope, zumal der zeitliche Versatz auch noch hinzu kommt.

    Dann musst du innerhalb der submit-Methode var form = jQuery( this ); hinzufügen und später einfach auf form.submit() zugreifen, das sollte tun.
    Das wollte leider auch nicht so recht klappen.
    Ich hab es nun anders gelöst. Ich setze im Formular 2 input-Felder mit je einer ID und display: none.

    In der jQuery-Funktion frage ich dann ab, ob mindestens eines der beiden vorhanden ist.
    Wenn ja, führt er den Code zum validieren aus und setzt return false.
    Dann entfernt er das erste INPUT, wenn alles ausgefüllt wurde. Folgend wird der ajax-Code ausgeführt und im Falle, dass auch dort ein 'okay' zurückgegeben wird, entfernt er den zweiten INPUT. Dann führt er einfach $("#register_form").submit(); nochmal aus und da dieses mal beide INPUT's entfernt wurden, überspringt er den kompletten Prozess und führt das Formular aus.

    Damit klappt es nun endlich
    Danke, DeluXe, für deine Hilfe.


    LG,
    Martin

    Falls es interessiert:
    PHP-Code:
    $("#register_form").submit(function(){
        if($(
    "input#1").length || $("input#2").length 0){
            var 
    nickname = $("#DNickname").attr("value");
            var 
    email = $("#eMail").attr("value");
            var 
    password = $("#Password").attr("value");
            var 
    day = $(".Tag");
            var 
    month = $(".Monat");
            var 
    year = $(".Jahr");
            var 
    tag '';
            var 
    monat '';
            var 
    jahr '';
            var 
    gender = $("#gender")[0].selected;
            var 
    agb = $("#AGB")[0].checked;
            var 
    fehler '';
            for(var 
    0day.lengthi++){
                if(
    day[i].selected==true) {
                    
    tag day[i].value;
                }
            }
            for(var 
    0month.lengthi++){
                if(
    month[i].selected==true) {
                    
    monat month[i].value;
                }
            }
            for(var 
    0year.lengthi++){
                if(
    year[i].selected==true) {
                    
    jahr year[i].value;
                }
            }
            if(
    nickname == ''){ fehler += '<li>Bitte gin einen Nicknamen ein</li>'; }
            if(
    email == ''){ fehler += '<li>Gib bitte eine Email-Adresse an</li>'; }
            if(
    password == ''){ fehler += '<li>Bitte gib ein Passwort ein</li>'; }
            if(
    tag == '' || monat == '' || jahr == ''){ fehler += '<li>Bitte gib dein Geburtsdatum ein</li>'; }
            if(
    tag == 31 && (monat == || monat == || monat == || monat == || monat == 11)){ fehler += '<li>Das Geburtsdatum ist ung&uuml;ltig</li>'; }
            if(
    gender == true){ fehler += '<li>Bitte gib ein Geschlecht an</li>'; }
            if(
    agb == false){ fehler += '<li>Du musst die AGB\'s annehmen</li>'; }

            if(
    fehler != ''){
                $(
    "ul#Fehler > li").remove();
                $(
    "ul#Fehler").append(fehler);
            }else{
                $(
    "input#1").remove();
                $.
    ajax({
                    
    type"POST"url"/ajax_reloader/register_check.php"data"action=check&email=" email "&nickname=" nickname,
                    
    complete: function(data){
                        if(
    data.responseText == 'okay'){
                            $(
    "input#2").remove();
                            $(
    "#register_form").submit();
                        }else{
                            $(
    "ul#Fehler > li").remove();
                            $(
    "ul#Fehler").append(data.responseText);
                        }
                    }
                });
            }
            return 
    false;
        }else{
            return 
    true;
        }
    }); 
     
    Die Intelligenz verfolgt mich, aber ich bin schneller!

Ähnliche Themen

  1. jQuery & Ajax
    Von Senshi86 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 22.05.10, 11:46
  2. jQuery: jQuery auf AJAX Response anwenden
    Von pointsdächster im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 12.04.10, 01:15
  3. jQuery und Ajax
    Von RedShot im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 13.12.09, 00:20
  4. jquery $.ajax({}); IE Darstellungsproblem
    Von Atrimedis im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 11.11.09, 16:51
  5. jquery ajax
    Von chaosgoettin im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 10.08.07, 15:41