4

私は次のJavaScriptを持っています:

function someFunction(string) {
    $.ajax({
        type: "GET",
        url: "some_endpoint_returning_json",
        async: false,
        data: "param=" + string,
        beforeSend: function() {
            $.blockUI({ message: '<h1><img src="static/busy.gif" /> Just a moment...</h1>' });
        },
        complete: function () {
            $.unblockUI();
         },
        dataType: "json",
        success: function(data) {
            window.alert(data.status);
        }
    });
}

ajaxリクエストを送信する前に、含まれているメッセージでUIをブロックしてから、メッセージを削除し、UIのブロックを解除してから、成功関数を実行します。

現在、ここに何が起こっているかです:

  1. UI はブロックされますが、メッセージは表示されません
  2. 成功ウィンドウのアラートがポップアップします
  3. アラート ウィンドウを確認すると、BlockUI メッセージが一瞬表示され、UI のブロックが解除され、ページが初期状態に戻ります。
4

1 に答える 1

5

に設定asyncするfalseと、ブラウザは ajax リクエストが処理されている間、すべての実行を停止します。beforeSendajax リクエストが送信される前に実行されますが、同期リクエストが非常に迅速に発生する可能性があるため、ブラウザーは実際には画面を更新せず、変更を表示しません$.blockUI。ajax が完了した後 (すぐに削除されたとき)、非常に短い時間、それらを見ることができます。

非同期を使用する必要がある場合は$.blockUI、ajax リクエストを開始する前に、個別に呼び出して短いタイムアウト (おそらく 100 MS) を設定することで、これを回避できる場合があります。

于 2013-01-30T00:28:12.207 に答える