4 Stimmen

AJAX- Antwortdaten nicht im globalen Bereich gespeichert?

Ich habe das Problem, dass meine unten gezeigten Zeilen die Variable nicht im globalen Bereich speichern:

var somedata;

$.ajax({
    cache: false,
    url: verification_url,
    success: function(data){
        somedata = data;
    }
});

alert(somedata); // Undefined

Was mache ich falsch? Muss ich dies in eine separate Funktion verpacken oder was?

11voto

user113716 Punkte 309387

En alert() Code läuft, bevor die Antwort von $.ajax empfangen wird.

Deshalb ist es undefined .

var somedata;

$.ajax({
    cache: false,
    url: verification_url,
    success: function(data){
        somedata = data;

        alert( somedata );   // 2. this will occur after the response is received
    }
});

alert(somedata); // 1. this will occur first

Hier können Sie sehen, dass die Warnmeldungen nicht in der richtigen Reihenfolge erfolgen. Standardmäßig verhindert eine AJAX-Anfrage nicht die Ausführung von nachfolgendem Code.

Das ist der ganze Zweck einer Rückruf Methode. Es handelt sich um eine Methode, die zum richtigen Zeitpunkt aufgerufen wird, anstatt sich auf eine synchrone Ausführung zu verlassen.

5voto

Darin Dimitrov Punkte 990883

AJAX ist asynchron. Das ist es, was die A für die das Akronym steht. Sie können nur im Erfolgs-Callback auf die Ergebnisse zugreifen:

$.ajax({
    cache: false,
    url: verification_url,
    success: function(data){
        // HERE AND ONLY HERE YOU HAVE THE RESULTS
        // So it is here that you should manipulate them
        alert(data);
    }
});

// this line is executed MUCH BEFORE the success callback 
// and the server hasn't yet sent any response.

Daher muss jeder Code, der die Ergebnisse manipulieren soll, innerhalb des Erfolgs-Callbacks oder in einer Funktion platziert werden, die vom Erfolgs-Callback aufgerufen wird. Sie sollten sich bei diesem Muster nicht auf den globalen Zustand verlassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X