ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
300
300
EMPFEHLEN
-
23.11.09 12:31 #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
):
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?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 i = 0; i < day.length; i++){
if(day[i].selected==true) {
tag = day[i].value;
}
}
for(var i = 0; i < month.length; i++){
if(month[i].selected==true) {
monat = month[i].value;
}
}
for(var i = 0; i < year.length; i++){
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 == 2 || monat == 4 || monat == 6 || monat == 9 || monat == 11)){ fehler += '<li>Das Geburtsdatum ist ungü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;
});
Danke für Eure Hilfe
MartinDie Intelligenz verfolgt mich, aber ich bin schneller!
-
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
-
23.11.09 13:26 #3
- Registriert seit
- Jan 2004
- Ort
- Hamburg
- Beiträge
- 8
Die Intelligenz verfolgt mich, aber ich bin schneller!
-
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
-
23.11.09 13:44 #5
- Registriert seit
- Jan 2004
- Ort
- Hamburg
- Beiträge
- 8
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!
-
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
-
23.11.09 14:22 #7
- Registriert seit
- Jan 2004
- Ort
- Hamburg
- Beiträge
- 8
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 > 0 || $("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 i = 0; i < day.length; i++){
if(day[i].selected==true) {
tag = day[i].value;
}
}
for(var i = 0; i < month.length; i++){
if(month[i].selected==true) {
monat = month[i].value;
}
}
for(var i = 0; i < year.length; i++){
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 == 2 || monat == 4 || monat == 6 || monat == 9 || monat == 11)){ fehler += '<li>Das Geburtsdatum ist ungü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
-
jQuery & Ajax
Von Senshi86 im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 22.05.10, 11:46 -
jQuery: jQuery auf AJAX Response anwenden
Von pointsdächster im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 12.04.10, 01:15 -
jQuery und Ajax
Von RedShot im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 13.12.09, 00:20 -
jquery $.ajax({}); IE Darstellungsproblem
Von Atrimedis im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 11.11.09, 16:51 -
jquery ajax
Von chaosgoettin im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 10.08.07, 15:41





Zitieren
Login





