0

jQuery で ajax 呼び出しを持つ関数の実行方法に疑問を持ちました。

2 つの関数を考えます。

function auth() {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: API_URL,
        data: {....
        },
        success: function (response) {}
    });
};

function getData() {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: API_URL,
        data: {....
        },
        success: function (response) {}
    });
};

以下に示すように、これらの関数を次々と呼び出します...

auth();
getData();

私の状況は、getData()「auth()」が完了した後にのみ実行したいということですgetData()。認証の成功関数内で呼び出すことができることを知っています。しかし、私が知りたいのは、上記のように、これらの関数を次々に呼び出すと、これらの関数がどのように実行されるかです。

どんな種類の助けもいただければ幸いです:)ありがとう。

4

2 に答える 2

1

jQuery で遅延オブジェクトを使用できます。ajax()結果を返すだけです。

function auth() {
  return $.ajax({
        type: "POST",
        dataType : "json",
        url: API_URL,
        data: { ....  },
        success: function (response) {
        }
  });             
};

auth.done(getData);

これは完了getData時に呼び出されます。auth

于 2013-02-16T04:37:21.080 に答える
0

それらは非同期で実行されます。必要に応じて、呼び出しで「async = false」を設定することにより、それらを待機(同期)させることができます。

    function auth() {
    $.ajax({
        **async: false,**
        type: "POST",
        dataType: "json",
        url: API_URL,
        data: {....
        },
        success: function (response) {}
    });
};

function getData() {
    $.ajax({
        **aysnc: false,**
        type: "POST",
        dataType: "json",
        url: API_URL,
        data: {....
        },
        success: function (response) {}
    });
};

これにより、次の呼び出しに進む前に呼び出しが終了しますが、通常、呼び出しを行うときにブラウザーがロックされます。

async (デフォルト: true) Type : Boolean デフォルトでは、すべてのリクエストが非同期で送信されます (つまり、デフォルトで true に設定されています)。同期リクエストが必要な場合は、このオプションを false に設定します。クロスドメイン リクエストと dataType: "jsonp" リクエストは、同期操作をサポートしていません。同期リクエストはブラウザを一時的にロックし、リクエストがアクティブな間はすべてのアクションを無効にする場合があることに注意してください。jQuery 1.8 以降、jqXHR ($.Deferred) で async: false を使用することは推奨されなくなりました。jqXHR.done() や非推奨の jqXHR.success() などの jqXHR オブジェクトの対応するメソッドの代わりに、成功/エラー/完了のコールバック オプションを使用する必要があります。

ソース JQM サイト: http://api.jquery.com/jQuery.ajax/

于 2013-02-16T06:03:10.553 に答える