jQuery変数が何の理由もなく定義されなくなる

私は変数 foo bar.txt というファイルの内容を保存したい次のコードを持っています:

var foo;

jQuery.get('http://example.com/bar.txt', function(data) {
     foo = data;
     alert(foo);
});        

alert(foo);

問題は、明らかに、jQuery関数が終了した後で変数が(そのスコープの外で と宣言されていても)定義されなくなることです。最初の alert(foo)はファイルの内容を正しく表示しますが、2番目の alert(foo)は何も表示しません。

誰が私にここで何が起こっているか教えてもらえますか?

0

2 答え

This is how asynchronous programming works. The $.get function "ends" when the callback handler is called, not in a linear fashion by following the code.

このコードを実行したときにトリガーする「最初の」 alert()は、その時点までに最後の行(ハンドラーの get。 ajaxリクエストはまだ完了していません。

第2の alert は、ajaxが完了したとき( $。get ハンドラ内)に発生し、ハンドラの引数から渡された変数に割り当てたデータを表示します。

いくつかのコメントはあなたのコードには、うまくいけば分かるでしょう:

var foo;//foo is now undefined

jQuery.get('http://example.com/bar.txt', function(data) {
    //the code in this handler will be executed after the ajax is complete
     foo = data;
     alert(foo);//foo is now the contents of bar.txt, this will happen last
});        

alert(foo);//foo is still undefined, and this alert happens first

foo変数を "再利用する"方法の例が必要な場合は、これを別にプログラムすることができます:

var foo;

jQuery.get('http://example.com/bar.txt', function(data) {
     foo = data;
     onData();
});        

function onData() {
    alert(foo);
}
7
追加された
それでは、 $。get ハンドラ内のデータを外部にある変数に保存するにはどうしたらいいですか?
追加された 著者 federicot,
はい、私は理解していると思う、私は "線形"プログラミングに慣れていますが、それは非常に扱いにくいです。私はすべてのコード(テキストファイルの内容を操作する)を$ .getの中に置き、うまくいきました!だから感謝の男
追加された 著者 federicot,
推奨されていない同期呼び出しを行わない限り、後でそれを「保存」することはできません。コールバックは、実行中のコードを継続する場所です。あなたは後で多くのことを使用するので、非同期プログラミングの周りにあなたの頭を得るかもしれません:)
追加された 著者 David,

お試しください

var foo;

jQuery.get('http://example.com/bar.txt', function(data) {
     window.foo = data;
     alert(foo);
});        

alert(foo);
2
追加された
無運:/まだ "未定義"を返す
追加された 著者 federicot,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript