t-alexashka
@t-alexashka
Сразу пишу legacy код

Как правильно отправить форму через ajax?

Добрый день товарищи друзья.

У меня есть форма в модалке для редактирования юзера. После успешной отправки я закрываю модалку и обновляю pjax-контейнер с gridview, т.к. по задумке не нужно обновлять всю страницу. Для этого я при клике на "сохранить" делаю вот что:

$('.modal').on('click', '.btn-user-edit-send', function (e) {
	
	e.preventDefault();

	var form = $(this).closest('form');
	
	$.ajax({
		url: form.attr('action'),
		method: form.attr('method'),
		data: form.serialize(),
		success: function (r) {
			if (r == 'OK') {
				form.closest('.modal').modal('hide');
				$.pjax.reload({ container: '#grid-users-pjax' });
			} else {
				alert('[Server error] ' + r);
			}
		},
		error: function (r) {
			console.log('[Ajax error] ', r);
		},
	});

});

т.е. если форма сохранилась на бекенде то он отдает "OK" - это и есть сигнал к тому что пора закрывать модалку и обновлять pjax-контейнер.

Но в таком случае если валидация не проходит - то я получаю "[Server error] " + html формы, т.е. сервер ругнулся на валидацию.

А если форму отправлять по обычному - то в результате в браузере я увижу уже страницу из action-атрибута формы, чего мне не нужно.

Как мне в этом случае лучше сделать? Как отправить форму ajax-ом, без перезагрузки страницы? Видел событие beforeSubmit, но события afterSubmit нету, значит возможно без граблей вроде самостоятельной отправки формы не обойтись. Тогда встает вопрос как проверить результат валидации, т.к. afterValidate собитие не срабатывает:

$('#form-edit').on('afterValidate', function (e, messages) {
	//canUserUpdate = true; console.log('validate success.');
	console.log('event = ', e);
	console.log('messages', messages);

});


Надеюсь понятно объяснил. Спасибо.

UPD.
Ошибка была вообще в другом, из за чего я грешил на beforeSubmit:
Форма подгружалась ajax-ом, и событие .on надо было вешать так:
$('body').on('beforeSubmit', '#form-edit', function(e) { ... });

тогда все работает как надо. Извиняюсь что всех запутал тут.
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 1
proudmore
@proudmore
Сделайте ajax валидацию формы и дело с концом. Submit будет срабатывать только на заведомо верных данных, вот и все.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы