質問

JavaScript関数の終了をリッスンする方法はありますか?関数が完了したときに設定できるトリガー?

AJAX オブジェクトが DB からデータを取得しているときにユーザー インターフェイス難読化手法 (BlockUI) を使用しようとしていますが、関数呼び出しの最後に関数を配置した場合でも、関数が最後に実行されるとは限りません。

例:

function doStuff() {
  blockUI();
  ajaxCall();
  unblockUI();
};

unBlockUI を起動する前に、doStuff が ajaxCall が完了するのをリッスンする方法はありますか?そのままでは、関数が線形に処理され、各オブジェクトが順番に呼び出され、それぞれを完了するために別個のスレッドが生成されます。したがって、AJAX 呼び出しが完了するまでに 10 ~ 15 秒かかる場合がありますが、関数の線形実行により、ユーザーをブロックしているのはほんの一瞬だけです。

これを回避するには、あまり洗練されていない方法があります。AJAX 関数によって設定された戻り値が true に設定された場合にのみループを終了する、またはそれに類する方法があります。しかし、それは不必要に複雑で非効率的であるように思えます。

役に立ちましたか?

解決

Ajax ルーチンをどのように実行しても、必要なのは、完了後に実行される「コールバック」関数です。

function ajaxCall(callback){
    //do ajax stuff...
    callback();
}

それから:

function doStuff(){
    blockUI();
    ajaxCall(unblockUI);
}

他のヒント

AJAX 呼び出しではコールバック関数を指定する必要があります。コールバック内から unblockUI を呼び出すことができます。

サジャックス は、AJAX 呼び出しの実行方法に関する詳細なヘルプを備えたシンプルな AJAX ライブラリです。

それもあります 別の投稿 それはあなたが探しているものを説明しています。

同期xhrを実行できます。これにより、通話中に (どれだけ時間がかかるかに関係なく) UI 全体がブロックされます。

応答の処理後に呼び出されるコールバック関数を指定するなど、非同期フローと互換性があるようにプログラム フローを再設計する必要があります。プロトタイプや JQuery などの方法を確認してください。これを実現します。

答えは簡単です。ajax リクエストが結果を返すときに unblockUI() を呼び出す必要があります。jQuery を使用すると、次のように実行できます。

function doStuff(){

    blockUI();

    jQuery.ajax({
        url: "example.com",
        type: "POST",           //you can use GET or POST
        success: function(){

            unblockUI();
        }
    });
}

データベースから情報が取得されている間、ユーザーに待機してもらいたいように思えます。データベースから情報を取得するために Ajax 呼び出しを行うときに行うことは、「取得しています...」というアニメーション GIF を表示することです。情報が取得されて Web ページに表示されるまで、アニメーション GIF は点滅し続けます。情報が表示されると、アニメーション GIF がオフまたは非表示になり、表示されている新しい情報にフォーカスが移動します。アニメーション GIF は、何かが起こっていることをユーザーに知らせます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top