Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   При AJAX-запросе не посылается кнопка 'submit' (https://javascript.ru/forum/events/43637-pri-ajax-zaprose-ne-posylaetsya-knopka-%27submit%27.html)

winch 31.05.2016 05:23

Немного объясню зачем мне надо вешать обработчик именно на submit.
В современной web разработке очень часто возникает необходимость отправлять формы аяксом. поэтому, чтобы не писать один тот-же код на разных страницах, я решил сделать универсальную функцию:
function FormSubmitAjax(sel1, success, sel2){  
    $(sel1).on('submit', sel2, function(ev){
      ev.preventDefault();
      var form = $(ev.target);
      $.ajax({ type: form.context.method,
        url: form.context.action,
        data: form.serialize(),
        context: { form: form},
        success: function(dat, status){
	       success.apply(this, [dat, status]);
        },
    });
  });
}

однако при практическом использовании выяснилось что <input type="submit" name="test"/> не посылается, вот ищу способ, как это исправить.

laimas 31.05.2016 13:17

Метод serialize() не возвращает поля отправки файлов и кнопки отправки формы, но ни ко не запрещает form.serialize() + "&" + и добавить кнопку. Зачем она только нужна не понятно.

Rise 31.05.2016 13:45

winch,
function ajaxFormSubmit(selector, settings) {
	$(selector).submit(function(e) {
		e.preventDefault();
		var $form = $(this), $button = $form.find(':submit:focus');
		if (!$button.length) return;
		$.ajax($.extend({
			url:  $form.attr('action'),
			type: $form.attr('method'),
			data: $form.serialize() + '&' + $.param($button),
			context: $form
		}, settings));
	});
}

ajaxFormSubmit('#myForm', {
	success: function(data, status, xhr) {
		// this == $form
		var $form = this;
		// ...
	},
	error: function(xhr, status, error) {
		// this == $form
	},
	beforeSend: function(xhr, settings) {
		// this == $form
	}
});

winch 31.05.2016 22:36

Цитата:

Сообщение от laimas (Сообщение 418080)
Метод serialize() не возвращает поля отправки файлов и кнопки отправки формы, но ни ко не запрещает form.serialize() + "&" + и добавить кнопку. Зачем она только нужна не понятно.

Нужна она затем, чтобы знать какую именно кнопку нажал пользователь, в тех случаях если кнопок несколько на одной форме.

winch 31.05.2016 22:43

Rise
ага! основная идея в том, чтобы перед отправкой найти нажатую кнопку селектором ':submit:focus'
спасибо! воспользуюсь.


Часовой пояс GMT +3, время: 16:28.