AJAX 呼び出しでスピナーを使用しています。関数内にバインド コードを実装したので、いつでも使用でき、特定の AJAX 呼び出しでスピナーを使用することを回避できます。たとえば、ユーザー名と電子メールの存在を onkeyup でチェックしていますが、キーが押されるたびにスピナーを表示したくないのは明らかです。
私が実装した方法は機能しますが、クライアント側の検証が完了し、たとえば登録ページで ajax 呼び出しが発生し、エラーが返された場合、キーが押されるたびにユーザー名と電子メールがスピナーを表示し始めます。
コードは次のとおりです。
HTML
<div id="spinner" class="spinner hidden">
<img id="img-spinner" src="<?php echo base_url(); ?>/images/spinner.gif" alt="Loading"/>
</div>
マスク機能
function show_hide_loading_mask() {
$("#spinner").bind("ajaxSend", function() {
$(this).show();
$.blockUI({ message: '' }); //Set message to empty to remove default Loading message and show spinner instead
}).bind("ajaxStop", function() {
$(this).hide();
$.unblockUI();
}).bind("ajaxError", function() {
$(this).hide();
$.unblockUI();
});
}
フォーム送信呼び出し
$('#frmMyForm').submit(function(){
if (validate()) {
show_hide_loading_mask();
$.ajax({
type: "POST",
url: "ajax/path",
data: $('#frmMyForm').serialize(),
dataType: "json",
success: function(data){
if (data.response == "OK") {
console.log('OK');
} else {
console.log('NOT OK');
}
},
error: function(xhr, textStatus, errorThrown) {
console.log('Exception...');
}
});
} else {
console.log('client side validation failed');
}
return false; // do not actually submit
})
関数の検証:
function validate() {
var param1 = $('#txtParam1').val();
var param2 = $('#txtParam2').val();
return param1.length >= 5 && param2.length >= 5 //return true when both are at least 5 chars long
}
サーバーへの旅行後にこれが起こっている理由は何ですか? ajaxStop がある場合、これは再び無効になります。
ありがとうございました。