2016-09-23 9 views
0

私はjQueryの:Ajaxのは、最初に呼び出されていません

function get_data_obj(){ 
    var dataObj; 
    $.ajax({ 
     url: "XXX.soesite.XXX", 
     success: function(result) { 
      dataObj = ['Hi']; 
      console.log("Inside ajax"); 
      console.log(dataObj); 
     } 
    }); 
    console.log("Outside ajax"); 
    console.log(dataObj); 
} 
get_data_obj(); 

の下に、私は期待していた出力がアヤックスインサイド

であるように見えますjqueryのコードを持っている
[ 'こんにちは']
外部ジャズ
['Hi]]

しかし、出力は、私はこの

のように見えますが、社外アヤックスアヤックス
インサイド
未定義
[「こんにちは」]

私は私の機能の制御フローについては本当に混乱しています取得しています。基本的に、私の関数は最初にajaxと考えられていましたが、他のステートメントは表示されましたが、残念ながら私の関数は私の期待どおりに機能しません。誰でも私のコードで何が間違っているのか教えてください。そして、どうすれば最初にAjaxの仕事を終えてからさらに進めることができますか?

+2

AJAXは非同期です。レスポンスを受信すると印刷されます。それが完了したときに値を返す関数呼び出しのように、呼び出した元の関数を中断しないとします。また、 'async:false'を試してください。これはあなたが望むことをするはずです。覚えておいてください。これは、「何かを認識しているが、それを使用していない」ものです。 –

+0

@MageshKumaarに助けてくれてありがとう。出来た。 –

答えて

1

$.ajaxは、特に指定しない限り、デフォルトでは非同期です。

あなたは操作が$.ajax要求した後に発生する場合、あなたはdone()/success()/fail()機能に含めるかfalseasyncを設定する必要があります。 False(デフォルト)=コードが一時停止:コールアヤックス

非同期際

function get_data_obj() { 
    var dataObj; 

    $.ajax({ url: "XXX.soesite.XXX", async: false, success: function(result) { 
     dataObj = ['Hi']; 
     console.log("Inside ajax"); 
     console.log(dataObj); 
    }}); 

    console.log("Outside ajax"); 
    console.log(dataObj); 
} 

get_data_obj(); 
+1

ありがとうございました。それはうまくいった。 –

+0

@ChiyaanSuraj同期コールは償却されるので、上記のソリューションを使用することはお勧めしません。 –

+0

@MageshKumaar - これは、私の第1の提案は、ajax呼び出しの 'done()'状態でコードの次の部分を呼び出すことです – Ted

0

以下覚えておいてください。 (他のコードはこれを待っています..)

Async:True =コードは並列実行されます。何も一時停止しません。

したがって、jqueryは要求を最初に完了するまで待機しません。

$ .ajax()によって提供されるコールバックフックを使用できます。

関連する問題