2017-02-15 3 views
0

関数内でjQueryを使用してGET要求を行い、その関数で前に宣言した変数を結果に設定しようとしています。しかし、それは未定義となる。私はここにそのコンセプトがないのですか?どのように私はこの作品のようなものを作ることができますか?ありがとう。関数の変数をjQuery AJAXの結果から設定する

function doSomething1() { 
    var x; 
    $.get(window.location.href, { q: 'stuff', q2: $('input').val() }, function(data){ 
     // value shows up 
     console.log(data); 
     x = data; 
    }); 
    return x; 
} 

function doSomething2() { 
     // comes up as undefined. 
     console.log(doSomething1()); 
} 

doSomething2(); 
+0

その成功の機能を処理しますが、あなたのリターンが呼ばれています。あなたの 'x'は定義されていません。 – andrepaulo

+0

また、コールバック関数の中に" return x "を入れてみました。論理的だとは思えますが、問題はありませんでした。私は重複を見ていきます。ありがとう! –

答えて

1

これは、$ .get()要求の非同期効果の障害です。ゲットが何かをする機会が来る前に、あなたはxを返しています。非同期関数を頭に入れておくのにはしばらく時間がかかります。

  1. doSomething2()コール値無しdoSomething1()
  2. doSomething1()定義x GET要求を開始し、undefinedを返す次のよう

    イベントの順序があります。

  3. doSomething2() GETリクエストが完了返さx
  4. をログに記録し、それが非同期だ後応答が、あなたのAJAX呼び出しから来る前
+0

GET要求のコールバックにリターンを置いたときに、それが機能しない理由は何ですか? –

+0

関数がGETを待って続行する前に終了すると、遅延が発生します。あなたの開始機能は、GETリクエストが並行して実行されるときに継続され、別々に終了する準備をしなければなりません。あなたはすでに成功関数内で 'console.log(data)'を使用しています。つまり、このデータを必要とするタスクを処理する場所です。 – Gwellin

+0

ありがとうございます。それは作る。だから私は、コールバック自体のデータを処理するか、それを処理するコールバック内から別の関数に渡す必要があるようです。 –

関連する問題