webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg

Почему form.submit(); вызывает ajax, а не обычный post?

Видимо я чего-то не знаю о js ибо есть код
$('.ya_donate').on('submit',function(e){
  e.preventDefault();
  var form = $(this);
  var data = form.serialize();
  $.post('/site/donate',data,function(data){
    form.submit(); //вот тут ожидаю обычный post, а получаю такой же ajax
  })
});

В форме есть action и он отличный от того куда летит ajax. Я ожидаю, что при отправке формы, отправка отменяется, идет ajax, там в ответ приходит json не имеет значения какой, но после ответа должен идти обычный post. Но идет еще 1 ajax, при чем туда же, а не туда куда указано в action формы.
Немного в замешательстве. Есть идеи?
  • Вопрос задан
  • 571 просмотр
Решения вопроса 1
Попробуйте так
$('.ya_donate').on('submit', function(e) {
    e.preventDefault();
    var form = $(this);
    var data = form.serialize();
    $.post('/site/donate', data, function(data) {
        form.unbind('submit').submit();
    })
});

Суть в том, что мы переключаемся на другое событие, на которое не подействует e.preventDefault(), объявленный выше по коду.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
bootd
@bootd
Гугли и ты откроешь врата знаний!
e.preventDefault(); - это отменяет стандартную отправку формы. Она не будет отправляться на сервер никак!!!

$.post('/site/donate',data,function(data){ - это ajax отправка. Поэтому, когда вы вызываете на форме событие, происходит всё то, что описано в форме!! Чего не понятно то? У вас бесконечный цикл. Форма каждый раз сама себя отправляется. Т.к. внутри события .on('submit') вы ещё раз отправляете форму и так до бесконечности!
Ответ написан
lazalu68
@lazalu68
Salmon
Как-то так:

$('form').submit( function(event) {
    var form = this;
    event.preventDefault();
    setTimeout( function () { 
        form.submit();
    }, 300);
});


То есть банально вызывать метод submit у HTMLFormElement, а не у $-объекта.
Ответ написан
werty1001
@werty1001
undefined
$( document ).ready(function() {

	var first = true;

	$( '.ya_donate' ).on( 'submit', function() {

		var form = $(this);

		if ( first ) {

			first = false;

			$.post( '/site/donate', form.serialize(), function( data ) {
				form.submit();
			});

			return false;

		}

	});

});
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы