AJAX が JQuery 関数の主要なアクションであることに問題があります。このコードをある程度線形にしたいと思いますが、非同期は効果がないようです。私がやろうとしているのは、「ローダー」を表示し、スクリプトが終了したらその「ローダー」を非表示にすることです。これには他にも多くのインスタンスがありますが、AJAX 呼び出しはありません。代わりに $.post を使用しましたが、この特定のインスタンスでは $.ajax の方が私のニーズを満たしています。
望ましい結果:
「select_add_user」.change が呼び出された瞬間に「loader」を表示したいと思います。スクリプト (ajax を含む) が完了するまで、ローダーをそのままにしておきたいと思います。
実結果:
ajax は、ローダーを表示することさえせずに FIRST をロードし、次に "#select_sub_group".append で、スクリプトが HTML を追加している間、ローダーが 1 ミリ秒間表示されます。
これが私のスクリプトです:
<script type="text/javascript">
$("#select_user_add").change(function(){
$("#loader:hidden").show("fast");
$('#select_sub_group').html('');
var appendD = "";
txt=$("#select_user_add").val();
$.ajax({
async: false, // For async, so it finishes running
url: "get_ug.php",
data: {
id: txt
},
type: "POST",
dataType: "json",
success: function(data){
$.each(data, function() {
appendD = appendD + '<option id="usg' + this.id + '" value="' + this.id + '">' + this.label + '</option>';
$('#lgroup_' + this.id).css('background-color', '#CCFFCC');
});
}
});
$('#select_sub_group').append(appendD);
$("#loader").hide("fast");
});
</script>
これに頭を悩ませています..それは本当に簡単か、本当に難しいかのどちらかです..笑