如何停止 AJAX 拨打多个电话?
How to stop AJAX making multiple calls?
我正在使用 jquery 倒数计时器插件 (http://keith-wood.name/countdown.html) 来显示时间。我正在调用一个函数来为回调事件 'onTick' 添加更多时间。当时间倒计时到 00:00:00 时,该函数将调用 ajax 来增加额外的时间。它工作正常,但每次计时器等于 00 时,ajax 都会进行多次调用 (>15)。我怎样才能让它只发送一个电话?我尝试执行 async: false 但它仍在进行多次调用。谢谢。
$(this).countdown({ until: time, format: 'HMS', onTick: addExtraTime });
function addExtraTime() {
if ($.countdown.periodsToSeconds(periods) === 00) {
var postValue = { ID: id }
if (!ajaxLoading) {
ajaxLoading = true;
$.ajax({
url: "@Url.Action("AddExtraTime", "Home")",
type: 'post',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(postValue),
success: function() {
// show success
},
error: function(data) {
// show error
}
});
ajaxLoading = false;
}
}
}
您有一个变量 ajaxLoading
,用于确定 Ajax 请求是否正在运行,但您将其设置为 false
立即 在 调用 $.ajax()
之后,而不是在收到响应时。在成功和错误处理程序中将其设置为 false
。
即使 ajax 请求仍在进行中,您仍要设置 ajaxLoading = false;
,请在请求完成后将其设置为 false
if (!ajaxLoading) {
ajaxLoading = true;
$.ajax({
url: "@Url.Action("AddExtraTime", "Home")",
type: 'post',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(postValue),
success: function() {
// show success
},
error: function(data) {
// show error
}
complete: function(){
ajaxLoading = false;
}
});
//ajaxLoading = false;
}
我正在使用 jquery 倒数计时器插件 (http://keith-wood.name/countdown.html) 来显示时间。我正在调用一个函数来为回调事件 'onTick' 添加更多时间。当时间倒计时到 00:00:00 时,该函数将调用 ajax 来增加额外的时间。它工作正常,但每次计时器等于 00 时,ajax 都会进行多次调用 (>15)。我怎样才能让它只发送一个电话?我尝试执行 async: false 但它仍在进行多次调用。谢谢。
$(this).countdown({ until: time, format: 'HMS', onTick: addExtraTime });
function addExtraTime() {
if ($.countdown.periodsToSeconds(periods) === 00) {
var postValue = { ID: id }
if (!ajaxLoading) {
ajaxLoading = true;
$.ajax({
url: "@Url.Action("AddExtraTime", "Home")",
type: 'post',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(postValue),
success: function() {
// show success
},
error: function(data) {
// show error
}
});
ajaxLoading = false;
}
}
}
您有一个变量 ajaxLoading
,用于确定 Ajax 请求是否正在运行,但您将其设置为 false
立即 在 调用 $.ajax()
之后,而不是在收到响应时。在成功和错误处理程序中将其设置为 false
。
即使 ajax 请求仍在进行中,您仍要设置 ajaxLoading = false;
,请在请求完成后将其设置为 false
if (!ajaxLoading) {
ajaxLoading = true;
$.ajax({
url: "@Url.Action("AddExtraTime", "Home")",
type: 'post',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(postValue),
success: function() {
// show success
},
error: function(data) {
// show error
}
complete: function(){
ajaxLoading = false;
}
});
//ajaxLoading = false;
}