2012-04-24 21 views
0

いくつかの値を返しますJavaScript関数Iは、JavaScriptの関数を定義している

function a() 

{ 
    var data = 'some data'; 
    $.getJSON(networkController,data,function(r) { 
      $.each(r, function(a) 
      { 
       alert(r[a].networkAccessToken); 
     }); 
    }); 
} 

それが正常に動作しますが、私のようにそれを行うと:

function a() 

{ 
    var data = 'some data'; 
    $.getJSON(networkController,data,function(r) { 
      $.each(r, function(a) 
      { 
       return r[a].networkAccessToken; 
     }); 
    }); 
} 
var c = a(); 
alert(c); 

アラートが定義されていない.....

+1

もう一度チェック.....それは正しい構文です 他の賢明な合計コード –

+0

あなたはデータベースからどのように値を取得していますか?値が正しく解析されていますか? –

+1

関数a()がajax呼び出しのコールバック関数であり、直接呼び出すと、ajaxエンジンで非同期に呼び出されない限り値bを持たない場合、 – Baz1nga

答えて

3

あなたのAJAXコールがノンブロッキングであることを認識することが重要です。これは、サーバからの応答がになる前にを返したことを意味します。これを処理する最も一般的な方法はcallbackを使用することです

(!最初の「A」は「非同期」の略):

function a(callback) { 
    var data = 'some data'; 
    $.getJSON(networkController,data,function(r) { 
     $.each(r, function(a) { 
      callback(r[a].networkAccessToken); 
     }); 
    }); 
} 

a(function(c) { 
    alert(c); 
}); 
0

次の2つの問題を抱えています。

まず、非同期JavaScriptとXMLは非同期です。 $.getJSONに電話すると、HTTPリクエストが送信され、データが戻ったときに実行する機能が登録されます。それはそれを待つ間、既存の関数を実行して1つを取得します。あなたが効果的のような何かやろうとしている

function a() { 
    $('button').click(function() { return 1; }); 
} 
foo = a(); // Would you expect this to be `1` and not `undefined`? 

第二には、each各値の関数を呼び出します。 eachに渡す関数は、eachではなく、getJSONまたはaと呼ばれます。その戻り値は、ループを継続するかどうかのみを決定します。

eachに渡す機能でを実行する必要があります。呼び出し元のチェーンにデータを渡すことはできません。あなたが戻ってきたものはもはや存在しません。

+0

それは大丈夫ですか? 'return $。それぞれ(r、function(){ return r [a] .networkAccessToken; }); ' –

関連する問題