2017-08-22 2 views
0

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?

Antwort

0
request.addEventListener("load", function() { 
     object = this.response; 
    }); 

genannt wird asynchron

object = this.response; 

später aktualisiert werden, Ihren Code

console.log(requestFunction("data.txt")); 

wartet nicht, es Aktualisierung zu beenden, also druckt die Orignal Wert

+1

Nein es ist keine asynchrone Funktion. Die Funktion wird asynchron aufgerufen ... –

+0

Ja, ich sehe, es kann zu Missverständnissen führen, bearbeitet – marvel308

+0

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

Verwandte Themen