@FVest

Как предотвратить повторную отправку формы при отправке ajax?

Всем привет. Подскажите как предотвратить повторную отправку данных при успешном событии? После отправки данных идет задержка 3 секунды, пользователь может отправить форму много раз.
Данный код блокирует отправку формы много раз, в случае ошибки форма так же блокируется.
$('form').submit(function(){
		$(this).find('input[type=submit], button[type=submit]').prop('disabled', true);
	});

Может быть добавить событие снятие блокировки спустя 3 секунды?
$('form').submit(function(){
		$(this).find('input[type=submit], button[type=submit]').prop('disabled', true);
		setTimeout(function(){
        $('input[type=submit], button[type=submit]').prop('disabled', false);
        }, 3000);
	});

Сама отправка формы идет по идентификатору
$('#appExchange').submit(function(){
        var url = '/ajax.php?action=app&type=exchange';
		var balance_user = $('#balance_user').html();
		var balance_adver = $('#balance_adver').html();
		var data = $(this).serialize()+'&balance_user='+balance_user+'+&balance_adver='+balance_adver+'&ajax=1';
        $.post(url, data, function(result){
			Toast.fire({icon: result['status'],text: result['text']});
			if(result['status'] == 'success'){
                        // ЗДЕСЬ КАКОЕ-ТО ДЕЙСТВИЕ ДЛЯ ЗАПРЕТА ПОВТОРНОЙ ОТПРАВКИ
			$('#balance_user').html(result['balance_user'].toFixed(5));
			$('#balance_adver').html(result['balance_adver'].toFixed(5));
			}
        }, 'json');
        return false;
    });

Как добавить блокировку повторной формы только при успешной отправке или как правильно вызвать функцию?
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
@FVest Автор вопроса
Пошарился немного в инете и нашел решение, оставлю на своем примере, может быть кому-то пригодится. При успешном событии кнопка блокируется, повторный запрос не отправляется. При ошибке убираем атрибут disable, чтобы человек мог отредактировать строки и отправить заново.
$('#appExchange').submit(function(e){
		e.preventDefault();
        $("#appExchange [type=submit]").prop('disabled', true);
        var url = '/ajax.php?action=app&type=exchange';
		var balance_user = $('#balance_user').html();
		var balance_adver = $('#balance_adver').html();
		var data = $(this).serialize()+'&balance_user='+balance_user+'+&balance_adver='+balance_adver+'&ajax=1';
        $.post(url, data, function(result){
			Toast.fire({icon: result['status'],text: result['text']});
			if(result['status'] == 'error'){
			$("#appExchange [type=submit]").prop('disabled', false);
			}
			if(result['status'] == 'success'){
			$('#balance_user').html(result['balance_user'].toFixed(5));
			$('#balance_adver').html(result['balance_adver'].toFixed(5));
			}
        }, 'json');
        return false;
    });
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час
21 нояб. 2024, в 21:42
100000 руб./за проект