3

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

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

例:

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

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

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

4

6 に答える 6

4

ただし、Ajax ルーチンを実行している場合は、完了後に実行される「コールバック」関数が必要です。

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

それで:

function doStuff(){
    blockUI();
    ajaxCall(unblockUI);
}
于 2008-09-25T17:53:22.260 に答える
1

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

SAJAXはシンプルな AJAX ライブラリで、AJAX 呼び出しを行う方法についてより多くのヘルプがあります。

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

于 2008-09-25T17:51:14.137 に答える
0

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

function doStuff(){

    blockUI();

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

            unblockUI();
        }
    });
}
于 2008-09-25T23:58:24.550 に答える
0

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

于 2008-09-26T01:05:01.677 に答える
0

同期 xhr を実行できます。これにより、呼び出し中に UI 全体がブロックされます (時間がかかる場合でも)。

于 2008-09-25T17:51:23.090 に答える
0

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

于 2008-09-25T17:55:52.097 に答える