2017-08-22 7 views
0

私はAJAXの基礎を学んでおり、呼び出しの結果を変数に格納しようとしています。私は、このオブジェクトでdata.txtをファイルがあります:AJAXの結果を純粋なJavascriptに格納する

[ 
{ "id": "5688","name": " Jorge Luis Borges"}, 
{ "id": "5799","name": " Lewis Carroll"} 
] 

をそして私はこの呼び出しでそれを呼び出しています:

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")); 

私はなぜ知らないが、変数にresult = this.responseには影響しませんそこで私は結果を保存したい、コンソールは元の値:No objectを出力する。

理由は何ですか?


は編集:私はHow do I return the response from an asynchronous call?にfantastics応答を読んでいる、と私は、出力結果呼び出されたときに、コールバック含めるように機能を更新:

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"); 

それが動作します。今、コールバック内で、私は変数に結果を格納し、関数の外で使用したいと思います。何かのように:

// This is the callback 
var storedObject = "Empty"; 
function outputFunction(a){ 
    storedObject = a; 
    return storedObject; 
}; 

しかし、もう一度、それは動作しません。 ¿前のコードと同じ理由ですか?

答えて

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

object = this.response; 

が後で更新される非同期的に呼び出され、あなたのコード

console.log(requestFunction("data.txt")); 
は、それが更新を完了するまで待機しません、それゆえのorignal値を出力します

+1

ありません非同期関数ではありません。この関数は非同期に呼び出されます... –

+0

はい、それは誤解を招くことがあります。編集しました – marvel308

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](https://stackoverflow.com/questions/14220321/how ... – Nikita

関連する問題