-1

jquery を使用して多数の AJAX 呼び出しを実行し、それらの呼び出しからページのいくつかの変数に JSON データを返す状況があります。問題は、Ajax 呼び出しが処理されるまでに少し時間がかかり、その間に、AJAX 呼び出しの出力を使用する予定の次のステートメントに制御が移ることです。呼び出しはデータを返すのに時間がかかるため、関数に失敗する空のオブジェクトが残っています。AJAX 呼び出しが終了するのを待って、呼び出しから結果が返された場合にのみ続行する方法はありますか?

これは私のコードで、この呼び出しが実行される前に制御が次のステートメントにシフトする他のjqueryファイルに transactionsAtError を返そうとしています

this.GetTransactionAtErrors = function (callback) {
        var transactionsAtError;
        $.ajax({
            url: ('/Management/GetTransactionsAtError'),
            type: 'POST',
            cache: false,
            success: function (result) {
                if (result && callback) {
                    transactionsAtError = (typeof (result) == "object") ? result : $.parseJSON(result);
                }
            }
        });
        return transactionsAtError;
    }
4

2 に答える 2

2

jQueryの$.getJSON()関数を使用していると仮定すると、サーバーからデータが返されると実行されるコールバック関数を提供できます。

例:

$.getJSON("http://example.com/get_json/url", function(data){
    console.log("the json data is:",data);
});

編集

あなたが追加したコードを見た後、私はあなたの問題が何であるかを見ることができます。

あなたのreturn transactionsAtError;ラインはajax呼び出しとは独立して実行されます。つまり、ajaxが完了する前に実行されます。

成功の中でコールバックを呼び出す必要があります:関数。

例:

this.GetTransactionAtErrors = function (callback) {
    $.ajax({
        url: ('/Management/GetTransactionsAtError'),
        type: 'POST',
        cache: false,
        success: function (result) {
            if (result && callback) {
                var transactionsAtError = (typeof (result) == "object") ? result : $.parseJSON(result);
                callback(transactionsAtError);
            }
        }
    });
}
于 2012-11-06T12:34:23.470 に答える