Ich habe Probleme, den Wert dieser Funktion zu ermitteln. Ich bin mir nicht sicher, warum, aber ich werde leer zurückkehren. Ich debugge es mit firebug und es wird zweimal ausgeführt, wobei der erste leer und der zweite den Wert zurückgibt.
Irgendeine Idee, wie ich das korrigieren kann.
function validation() {
if (val()); {
alert("Error");
} else {
alert("Pass");
}
}
function val() {
var answer;
dojo.xhrGet({
url: "ValodS?option=12",
handleAs: "text",
load: function (response) {
if (response == 'Pass') {
answer = false;
} else {
answer = true;
}
}
});
return answer;
}
3 Antworten
Das Problem ist, dass Sie die Antwort zurückgeben, bevor sie jemals gesendet wird (die AJAX-Anforderung wird im Hintergrund ausgeführt, ohne den aufrufenden Code zu blockieren.
Die einfachste Lösung wäre, den Anrufer eine Rückruffunktion an Ihre Funktion übergeben zu lassen. Sie können dann die Rückruffunktion im load
- Handler aufrufen (und so die Daten auf diese Weise übergeben).
Wenn val zurückkehrt, wird answer
nicht zugewiesen. Sie rufen eine asynchrone Operation auf, die eine http-Anforderung sendet. Der Kontrollfluss wird dann fortgesetzt, und wenn die http-Anforderung schließlich beendet ist, wird die von Ihnen definierte anonyme Funktion, die answer
zuweist, ausgeführt.
Du hast ein Extra; nach deinem if
Ändern Sie die erste Zeile von
if (val());
Zu
if (val())