0

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);

アラートは未定義です.....

4

2 に答える 2

3

AJAX呼び出しが非ブロッキングであることを理解することが重要です。これは、サーバーから応答を受信するに戻ることを意味します。(最初の「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);
 });
于 2012-04-24T06:15:00.440 に答える
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値ごとに関数を呼び出します。渡す関数はnotまたは。eachによって呼び出されます。その戻り値は、ループを続行するかどうかを決定するだけです。eachgetJSONa

に渡す関数でeachやりたいことは何でもする必要があります。呼び出しチェーンにデータを戻すことはできません。戻したいものはもう存在しません。

于 2012-04-24T06:19:29.903 に答える