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;
}
0
user1725253 10 Okt. 2012 im 00:42

3 Antworten

Beste Antwort

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).

1
Justin Niessner 9 Okt. 2012 im 20:45

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.

1
driis 9 Okt. 2012 im 20:45

Du hast ein Extra; nach deinem if

Ändern Sie die erste Zeile von

if (val());

Zu

if (val())
0
moopet 9 Okt. 2012 im 20:44