Hai,
ich habe ein Problem mit den Callback-Funktionen von JQuery.
Szenario:
- Ein Formular wird abgesandt
- vorher wird ein Eventhandler aufgerufen
- dieser ueberprueft die eingegebenen Werte mittels Ajax-Post-Request an PHP-Funktionen
- wenn alles OK ist, werden die Daten endgueltig an PHP uebermittelt.
- wenn nicht, dann erscheint im Formular eine entsprechende Fehlermeldung (fuer jedes Eingabefeld unterschiedlich)
Mein Problem ist nun, dass sich die Ablaeufe auf Grund der Callbacks ueberschneiden (das ist zumindest meine Vermutung, bzw. war das das Ergebnis des Debuggens).
Folgend der Code. Die problematisch Stelle habe ich mit $$$$$$ gekennzeichnet. Denn an dieser Stelle wird auf ein Array zugegriffen, der erst durch die Callback-Funktionen manipuliert wird. Jedoch sollte der Code erst ausgefuehrt werden, wenn die Callback-Funktionen beendet sind.
var valids = new Array();
valids["xkb79"] = false; // ==> INDIKATOR, OB WERT EINES EINGABEFELDES KORREKT GESETZT IST
$(document).ready(function()
{
// validate input before submitting the form
$("form:last").submit(function(event) {
// validate each element
Validate(); // ==> DER REST DES CODES MUSS WARTEN, BIS DIE FUNKTION
// (INKL. CALLBACKS) ABGESCHLOSSEN SIND...
// check if a value is not valid
for (var valid in valids) {
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// ...DENN DIE validate-METHODE VERAENDERR WERTE DES valids-ARRAYS
// AUF DIE AN DIESER STELLE ZUGEGRIFFEN WIRD.
// DERZEITIGER STAND IST DER, DASS DIESER CODE _VOR_ DEM BEENDEN
// DER validate-METHODE AUFGERUFEN WIRD (DA CALLBACKS)
if(valids[valid]==false) {
// do some stuff
return false;
}
}
// if everything is OK we pass through
$.ajax({
// do some stuff
});
// finish (do not submit the form)
return false;
});
});
function Validate()
{
// SENDET PHP-REQUEST, data ENTHAELT ENTWEDER NICHTS (=OK) ODER EINE
// FEHLERMELDUNG
// email validation
$.post("sources/ajax/registration_customer.php", { key: "email", val: $("#xkb79").val() },
// MarkFormField ALS CALLBACK, SIEHE UNTEN
function(data){ MarkFormField("xkb79",data);
});
// BTW ==> IST ES AN DIESER STELLE NICHT MOEGLICH, DEN CODE AUS DER CALLBACK-FUNKTION EINFACH _DANACH_ AUFRUFE??
// DOCH LAUT DOKU LIEFERT MIR $.post() KEINEN WERT ZURUECK (ich brauche ja den Wert aus data)
// first name validation
$.post("sources/ajax/registration_customer.php", { key: "first_name", val: $("#first_name").val() },
function(data){ MarkFormField("first_name",data);
});
// and and..
}
function MarkFormField(fieldName,errMsg)
{
if(errMsg==null || errMsg.length<=0)
{
// HIER FINDET DER ZUGRIFF / DIE VERANEDERUNG DES valids-ARRAY STATT.. ALLERDINGS ZU SPAET
valids[fieldName] = true;
// do some more stuff
}
else
{
valids[fieldName] = false;
// do some stuff
}
}
Falls der Code Syntax-Fehler enthalten sollte, dann liegt es daran, dass ich ihn stark gekuerzt habe.
Des weiteren sind die kritischen Stellen/Fragen in Grossbuchstaben geschrieben.
Ein Loesungsansatz waere sicherlich das ganze snychron laufen zu lassen, jedoch soll es hierbei einige Probleme mit dem Browser geben.
Bin fuer jeden Hinweis dankbar.
MfG,
Sympatisant
"If the future isn't bright, at least it is colorful"