Мне нужно, чтобы этот код срабатывал с первого нажатия на сабмит.
jQuery(function() {
var x = false;
jQuery(document).on('submit','#bit_exchange_form',function(){
if(x){
return true;
}
var form = jQuery(this);
jQuery.ajax({
type: "POST",
url: "/requests/bit_exchange_step_2.php",
data: jQuery("#bit_exchange_form").serialize(),
dataType: "json",
success: function (data) {
if(data.status == "success") {
x = true;
jQuery('#loading_image').show(); // show animation
form.submit();
} else {
jQuery("#bit_exchange_results").html(data.msg);
}
}
});
return x;
});
});
Таким образом остановил бесконечный цикл сабмит, но теперь форма работает только со второго клика.
jQuery.ajax асинхронная команда, поэтому return x; не будет дожидаться выполнение ajax и сразу вернет значение.
Как решение можно забиндить кнопку submit, это решит проблему с бесконечным циклом
jQuery(function() {
jQuery('#bit_exchange_button').on('click', function(e){
var $form = $('#bit_exchange_form');
jQuery.ajax({
type: "POST",
url: "response_ajax.php",
data: $form.serialize(),
dataType: "json",
success: function (data) {
if(data.status == "success") {
$form.submit();
} else {
jQuery("#bit_exchange_results").html(data.msg);
}
}
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="bit_exchange_form" action="#">
<input type="text" name="msg">
<button id="bit_exchange_button" type="button">Сохранить</button>
</form>
<div id="bit_exchange_results"></div>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей