有没有办法检查是否有正在进行的ajax请求? 类似的东西:
if ( $.ajax.inProgress ){ do this; } else { do that; }
答案 0 :(得分:11)
是的,有
$.ajax({
type: 'get',
url: 'url',
data: {
email: $email.val()
},
dataType: 'text',
success: function(data)
{
if(data == '1')
{
$response.attr('style', '')
.attr('style', "color:red;")
.html('Email already registered please enter a different email.');
}
else
{
$response.attr('style', '')
.attr('style', "color:green;")
.html('Available');
}
},
beforeSend: function(){
$email.addClass('show_loading_in_right')
},
complete: function(){
$email.removeClass('show_loading_in_right')
}
});
当ajax请求刚刚启动时, beforeSend 将执行您需要执行的过程,并且当ajax请求完成时,将调用完成。
documentation
答案 1 :(得分:7)
您基本上应该在脚本设置为false
之上设置一个变量,并在ajax上将其设置为true
并在success
处理程序中将其设置为false
如 described here 。
答案 2 :(得分:5)
要中止ajax请求, 使用
if($.active > 0){
ajx.abort();//where ajx is ajax variable
}
要继续运行ajax请求, 使用
if($.active > 0){
return;
}
答案 3 :(得分:4)
你可能会喜欢这个:
$(document).ready(function() {
var working = false;
$("#contentLoading").ajaxSend(function(r, s) {
$(this).show();
$("#ready").hide();
working = true;
});
$("#contentLoading").ajaxStop(function(r, s) {
$(this).hide();
$("#ready").show();
working = false;
});
$('#form').submit(function() {
if (working) return;
$.post('/some/url', $(this).serialize(), function(data){
alert(data);
});
});
});
答案 4 :(得分:1)
如果您完全控制javascript代码,则可以在每次启动ajax请求时递增变量,并在请求完成时递减它(成功,失败或超时)。这样,您始终可以知道是否有正在进行的请求。