我在一个脚本中有几个 ajax 请求,一些同步一些异步我使用 pload.gif 在 ajax 请求处于活动状态超过 1 秒时显示。我发现在一种情况下,即使请求成功并且预期的操作已完成,pload.gif 仍会继续显示。N:B:没有其他请求被触发,即 $.active = 1。但是 ajaxStop 没有触发此外我已经测试了 ajaxComplete 和 ajaxSuccess(不是我想要这些,因为我想捕获任何异步请求)并且这些也不会触发任何一个。
这是有问题的请求:
$.ajax({
beforeSend: function(){
$("#loading p").append("validate class schedules");
console.log("validate class schedules");
},
type: "POST",
url: "../_admin/admin_Validate_Class_Schedule.php",
data: {class_Key: current_Class_Key, schedule_Key : current_Schedule_Key},
dataType: "text",
async: false,
success: function(return_Data){
console.log("success");
var result = $.trim(return_Data);
console.log("result: " + result + " " + "call count: " + call_Count + " : " + $("#schedule_Description").val() + " " + $("#schedule_Description").val().length + " " + current_Class_Key);
if (result == "exists"){
$("#create_Schedule .form_Submit").attr("value", "Update Schedule");
$("#create_Schedule").attr("action", "process_Schedule_Update.php");
$(".form_Footer .form_Submit").css("color", "#fff");
$(".form_Footer .form_Submit").removeAttr("disabled");
} else {
$("#create_Schedule .form_Submit").attr("value", "Create Schedule");
$("#create_Schedule").attr("action", "process_Schedule_Create.php");
$(".form_Footer .form_Submit").css("color", "red");
$(".form_Footer .form_Submit").attr("disabled","disabled");
if ((current_Class_Key.length != 0) && ($("#schedule_Description").val().length != 0)){
$(".form_Footer .form_Submit").css("color", "#fff");
$(".form_Footer .form_Submit").removeAttr("disabled");
}
}
},
error: function(){
console.log("Validate Could not retrieve XML file.");
}
}); // end ajax call
我的诱惑是在成功分支的末尾使用以下内容
if ($.active == 1){ // nothing else requested which should be the case
$.event.trigger( "ajaxStop" ); // force a stop
$.active = 0; // force active to zero as belt and braces as not
} // sure if triggering stop will set active to zero
但是我不确定-这是否会为以后存储问题以及为什么无论如何都需要这样做。我不想在我的所有请求中都开始编码。我希望我的所有请求在完成后减少 $.active。所以我想真正的问题是为什么不是这样?
欢迎任何想法。