submit работает со второго раза

174
20 октября 2019, 12:50

Мне нужно, чтобы этот код срабатывал с первого нажатия на сабмит.

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;
    });
});

Таким образом остановил бесконечный цикл сабмит, но теперь форма работает только со второго клика.

Answer 1

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>

READ ALSO
Достать номер из текста

Достать номер из текста

Дан текст, в нём есть номер телефона, может быть как мобильный, так и "домашний", определенного формата нет, длина тоже может быть разной, например...

196
Как правильно подключить SQL Server к Visual Studio?

Как правильно подключить SQL Server к Visual Studio?

Я только только начал изучать C# с ASPnet фреймворк

192
Как проверить что в тексте ровно 4 цифры?

Как проверить что в тексте ровно 4 цифры?

Wrong output for "1234\n" Expected: False But was: True

182
Как преобразовать IEnumerable&lt;JToken&gt; в Linq.JToken

Как преобразовать IEnumerable<JToken> в Linq.JToken

У меня есть JObjectПосле выборки не могу преобразовать в JToken

144