Рассмотрим следующий пример с использованием jQuery (хотя вы могли бы адаптировать его для raw js или другой библиотеки js):
function doSubmit(event) {
event.preventDefault();
var $this = $(this);
$.ajax({
url: $this.attr('action'),
type: 'post',
data: $this.serilaize(),
success(responseHtml) {
// assume responseHtml is the next form
var newForm = ajaxifiyForm($('form', responseHtml));
$this.unbind('submit').replaceWith(newForm);
}
});
return false;
}
function ajaxifyForm(form) {
return $(form).submit(doSubmit);
}
$(document).ready(function(){
ajaxifyForm($('#your-form'));
});
Здесь мы полагаемся на загрузку первой страницы, чтобы форма уже была включена на стороне сервера. Когда DOM готов, мы присоединяем обработчик события к событию отправки формы. Этот обработчик отменяет обычный процесс отправки и вместо этого использует ajax. Он отправляет URL-адрес, указанный в атрибуте action
.
Когда сообщение успешно, оно берет ответ HTML из этого сообщения и заменяет исходную форму им после применения того же обработчика, который мы использовали в исходной форме. Это основано на предположении, что php-скрипт (-ы), который мы публикуем, всегда возвращают следующую форму со всеми заполненными значениями.
Имейте в виду, что вы можете отправить данные файла таким способом. Для этого вам нужно использовать iframe в качестве посредника (есть и другие способы, которые не используют iframe). Вы можете поискать эту проблему в Google ajax file upload
.