Ich lerne die Grundlagen von AJAX, und ich versuche, das Ergebnis des Aufrufs in einer Variablen zu speichern. Ich habe eine data.txt Datei mit diesem Objekt:Speichern Ergebnis von AJAX in reinem Javascript
[
{ "id": "5688","name": " Jorge Luis Borges"},
{ "id": "5799","name": " Lewis Carroll"}
]
Und ich rufe es mit diesem Aufruf:
var object = "No object";
function requestFunction(url){
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.addEventListener("load", function() {
object = this.response;
});
request.send(null);
return object;
};
console.log(requestFunction("data.txt"));
Ich weiß nicht, warum, aber result = this.response
hat keinen Einfluss auf die Variable wo ich das Ergebnis speichern möchte, und die Konsole gibt ihren ursprünglichen Wert aus: No object
.
Irgendeine Idee warum?
EDIT: Ich habe die fantastics Antworten in How do I return the response from an asynchronous call? zu lesen, und ich die Funktion enthalten einen Rückruf aktualisiert, die, wenn der Ausgang das Ergebnis genannt:
function requestFunction(url){
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.addEventListener("load", function() {
outputFunction(this.response); // The callback
});
request.send(null);
};
// This is the callback
function outputFunction(a){
console.log(a);
};
requestFunction("data.txt");
Es funktioniert. Jetzt möchte ich das Ergebnis innerhalb des Callbacks in einer Variablen speichern und außerhalb der Funktion verwenden. Etwas wie:
// This is the callback
var storedObject = "Empty";
function outputFunction(a){
storedObject = a;
return storedObject;
};
Aber wieder funktioniert es nicht. ¿Ist das der gleiche Grund wie der vorherige Code?
Nein es ist keine asynchrone Funktion. Die Funktion wird asynchron aufgerufen ... –
Ja, ich sehe, es kann zu Missverständnissen führen, bearbeitet – marvel308
OK, überprüfend [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Https://stackoverflow.com/questions/14220321/how -do-i-return-the-response-from-async-Aufruf) ... – Nikita