Во избежание получения ошибки дважды я использую beforeSend.Ajax- beforeSend
hasSent = false
function submit() {
if (!hasSent)
$.ajax({
url: "${createLink(controller:'userInvitation', action:'ajaxUpdate')}",
type: "POST",
data: $("#invitationForm").serialize(),
success: function(data, textStatus, jqXHR) {
$('#invitationForm')[0].reset();
$('.thank-you-modal').modal('show');
hasSent = true;
console.log(hasSent)
},
complete: function() {
hasSent = false;
console.log(hasSent)
}
});
}
Как вы можете видеть, что Аякс должен произойти, только если hasSent=false
. По какой-то причине ajax
происходит также, если пользователь нажимает несколько раз (очень быстро) на кнопку отправки
'hasSent' не обновляется истина, пока вы не получите ответ от вызова, поэтому щелкнув по нему два раза означает, что он может просто выстрелить еще раз, прежде чем ваш ответ возвращается. Возможно, было бы разумно обновить его в начале функции после оператора if, а затем сделать его ложным после завершения. – Orpheus
Вы можете отключить кнопку onclick. – jthomas