2012-02-09 17 views
0

最初の例を参照してくださいあなたは私の質問を理解することができます。JavaScript関数内で変数を設定して返す方法は?

var x; 
function checkTime() { 
    $.ajax({ 
     type: 'GET', 
     url: 'http://www.example.com/time.php', 
     data: test, 
     dataType:'json', 
     success: function (data) { 
      if (data == 0){ 
       x = 'true'; 
      } else if (data == 1){ 
       x = 'false'; 
      } 
     } 
    }); 
} 

checkTime(); 
alert (x); 

アラートがundefined

になります私はcheckTime関数内xを設定して、私が行う場合でも機能

外にそれをつかむ必要があります。

var x = checkTime(); 
alert (x); 

私はまだ取得しますundefined

また、私は本当か偽かをチェックする必要があります、多分、物事を行う別の方法があります。私も試した:

... 
if (data == 0){ 
    return true; 
} else if (data == 1){ 
    return false; 
} 
... 

しかし、私はそれを確認する方法がわからない。

場合(X == 1){//もし(X == true)を //何か を行う}

任意のアイデア:

基本的に私のようなので、何かする必要がありますか?

おかげ

+0

変数が定義されますが、Ajaxの機能はそう変数は、あなたがそれを警告時間によって定義されていない非同期です:

function checkTime(callback) { $.ajax({ type: 'GET', url: 'http://www.example.com/time.php', data: test, dataType:'json', success: function (data) { var x = ''; if (data == 0){ x = 'true'; } else if (data == 1){ x = 'false'; } // Call the callback function with 'x' callback.call(null, x); } }); } 

そしてそれが好きな使用は、以下の通りです。 – Niklas

答えて

4

これは、デフォルトの動作が.ajax()の場合、という非同期のです。 alert()が発生するまでにxは設定されません。 .ajax()aync=falseに設定するか、Ajaxリクエストが完了したときにコールバックするコールバック関数を渡す必要があります。あなたが期待するよう

checkTime(function (x) { 
    alert(x); 
}); 
2

AJAXは非同期であるため、それは起こります。あなたのコードがalertに達すると、AJAXリクエストのsuccess関数はまだ実行されません。 ajaxリクエストをasync:falseに設定しようとするか、成功の関数の中で警告を出します。

+0

はい。さらに、 'checkTime'自体は何も返さないので、' x = checkTime() 'の結果は自然に' undefined'になります。 –

1

「成功」に対して定義された関数の戻り値に直接アクセスすることはできません。まず、2つの関数、つまりcheckTimeと、ajax呼び出しの成功イベントの名前のないイベントハンドラ関数が含まれていることを知っておく必要があります。その名前のないイベントハンドラ関数から値を取得する必要があります。その関数はcheckTimeから直接呼び出されるのではなく、AJAX要求が返されたとき(event-driven programmingAJAX呼び出しが成功したときにfunction (data) {...}が実行されます。が発生します)。

例では、checkTimeの実行後に呼び出すalertは、通常、AJAX要求が完了する前に呼び出されます。これは、AJAX要求がに非同期的に発生するため、呼び出しが成功したというイベントはまだ発生していない必要があるためです。要求に対する応答を常に待つ場合は、AJAX呼び出しの非同期性を無効にすることができます(async:false)。しかし、イベントハンドラで直接行うのではなく、外部で行うことを区別することもできます。イベントドリブンプログラミングのパラダイムに従うことを望むなら、これは道のりです。

リクエストの実行中に何か他の処理を続行する場合は、オプションには、成功関数AJAX呼び出しの "戻り値"(そして場合によっては呼び出しが終了したかどうかを示す2番目の値)に他の(たとえばグローバルな)変数を使用し、それがまだ設定されているかどうかを定期的にチェックしますイベント駆動型プログラミングのパラダイムであり、変数の頻繁なポーリングが不要なため、悪い習慣とみなされる可能性があります)。

0

成功関数が実行される前にすぐにcheckTime()が返されるために発生します。成功関数は、ajax呼び出しが完了するまで実行されないため、使用しようとするとxはまだ設定されていません。

あなたが達成しようとしていることに応じて、成功のコールバック内にアラートを入れることができます。

関連する問題