0

検討:

function ajaxCall(url, callback) {
    $.ajax({
        type: "GET",
        url: url,
        success: function (data) { // <-- fail point: where does the returned data go, now?
            // do stuff with data
            if ( callback ) {
                var ret = callback();
                if ( ret !== undefined ) {
                    return ret;
                }
            }
        }
    });
}

function fooBar() {
    return ajaxCall('some/url', function () {
        // do stuff
        return some_value;
    }
}

そうですね、基本的には、ブラウザがハングしないようにリクエストの非同期性を維持したいのですが、最終的に値を返します...これは単純化された例ですが、おそらくさらに単純化できます。

$.ajax実際、私が目にする唯一の障害は、とそのsuccess:無名関数の間の移行です。

うーん。

4

1 に答える 1

3

このように呼び出しを非同期に使用することはできません。コールバックは、呼び出し元の関数が戻ってからずっと後に実行されます。代わりに、コールバックの一部 (または全体) としてデータを必要とする関数を呼び出す必要があります。次に例を示します。

function ajaxCall(url, callback) {
  $.ajax({
    type: "GET",
    url: url,
    success: callback
  });
}

function fooBar() {
    ajaxCall('some/url', function (data) {
        functionThatNeedsData(data);
    });
}

これは何が起こっているかを示すための単なる例であり、実際には次のようになります。

function fooBar() {
  $.get('some/url', functionThatNeedsData);
}

これは、最初の引数としてリクエストからデータを取得する your を呼び出すだけfunctionThatNeedsDataです...したがって、サーバーがデータで応答するとすぐに、必要な場所にデータを渡し、そのデータで残りの作業を行います。

于 2010-12-04T10:26:41.137 に答える