Существует ли способ проверить, существует ли происходящий запрос ajax? Что-то как:
if ( $.ajax.inProgress ){ do this; } else { do that; }
Вы должны в основном установить переменную поверх набора скрипта в false
и при ajax initiate установить ее в true
и в обработчике success
снова установить ее в false
, как описано здесь.
да, есть
$.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')
}
});
beforeSend выполнит необходимый процесс, когда запрос ajax только начался и будет вызван complete когда запрос ajax завершен.
документация
Вам может понравиться это:
$(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);
});
});
});
Если вы полностью контролируете код javascript, вы можете инкрементировать переменную всякий раз, когда вы запускаете ajax-запрос, и уменьшая его при завершении запроса (с успехом, сбоем или тайм-аутом). Таким образом, вы всегда будете знать, есть ли запрос в процессе.