jQuery Global Ajax Event Handlersをご覧ください。一言で言えば
、あなたは一人ひとり AJAX要求で発生したイベント、その名のグローバルイベントハンドラを設定することができます。いくつかのイベントがありますが、下のコードサンプルではajaxStart()
とajaxComplete()
を使用します。
アイデアは、我々はロードを示すことが、ajaxStart()
イベントにフォーム&ボタンを無効にされ、その後、フォームを再度有効にしてajaxComplete()
イベント内部の負荷要素を非表示にします。
var $form = $("form");
$form.ajaxStart(function() {
// show loading
$("#loading", this).show();
// Add class of disabled to form element
$(this).addClass("disabled");
// Disable button
$("input[type=submit]", this).attr("disabled", true);
});
とAjaxの完全なイベント
$form.ajaxComplete(function() {
// hide loading
$("#loading", this).hide();
// Remove disabled class
$(this).removeClass("disabled");
// Re-enable button
$("input[type=submit]", this).removeAttr("disabled");
});
あなたは要素の一部をクリーンアップする必要がある場合がありますので、AJAX呼び出しが失敗した場合にもajaxError
イベントにアタッチする必要があるかもしれません。それをテストし、失敗したAJAXリクエストで何が起こるかを確認してください。
P.S.$.ajax
など($.getJSON
)に電話している場合は、AJAXがいずれの要素にも接続されていないため、$.ajaxStart
と$.ajaxComplete
でこれらのイベントを設定できます。 $(this)
にアクセスできないので、コードを少し並べ替える必要があります。