Вы не сможете сделать это легко с помощью простого javascript. Когда вы публикуете форму, входные данные формы отправляются на сервер, и ваша страница обновляется - данные обрабатываются на стороне сервера. То есть submit()
функция фактически ничего не возвращает, она просто отправляет данные формы на сервер.
Если вы действительно хотите получить ответ в Javascript (без обновления страницы), тогда вам нужно будет использовать AJAX, а когда вы начнете говорить об использовании AJAX, вам понадобится библиотека. jQuery , безусловно, самый популярный и мой личный фаворит. Есть отличный плагин для jQuery под названием Form, который будет делать именно то, что вам кажется.
Вот как можно использовать jQuery и этот плагин:
$('#myForm')
.ajaxForm({
url : 'myscript.php', // or whatever
dataType : 'json',
success : function (response) {
alert("The server says: " + response);
}
})
;
var xhr = new XMLHttpRequest() xhr.open("POST", "myscript.php"); xhr.onload=function(event){ alert("The server says: " + event.target.response); }; var formData = new FormData(document.getElementById("myForm")); xhr.send(formData);
Альтернативой Ajax является установка невидимого
<iframe>
объекта в качестве цели вашей формы и чтение его содержимого<iframe>
в егоonload
обработчике. Но зачем беспокоиться, когда есть Ajax?Примечание. Я просто хотел упомянуть эту альтернативу, поскольку в некоторых ответах утверждается, что этого невозможно добиться без Ajax.
источник
<iframe>
POST (с обратным вызовомparent
). И для загрузки, и для загрузки ...Ванильный способ Javascript, отличный от jQuery, извлеченный из комментария 12me21:
POST
Тип содержимого For по умолчанию - «application / x-www-form-urlencoded», что соответствует тому, что мы отправляем в приведенном выше фрагменте. Если вы хотите отправить «другие вещи» или как-то изменить это, прочтите здесь некоторые мелкие детали.источник
<input type='button' onclick="submitForm(); return false;">
или вы могли добавить прослушиватель событий для события «отправить», например, ответ Маркуса: stackoverflow.com/a/51730069/32453Я делаю это так, и это работает.
источник
event.preventDefault();
(event
= первый аргумент функции отправки) вместоreturn false
. Возврат false не просто остановит браузер от отправки формы, но также предотвратит возникновение других побочных эффектов, которые могут быть важны. Там являются многими из вопросов , связанных с этим.FormData($("myform")[0])
если вы пытаетесь загрузить тип ввода = файл.event.target.action
и$(event.target).serialize()
вместо$('#form').attr('action')
и$('#form').serialize()
.Будущие искатели Интернета:
Для новых браузеров (по состоянию на 2018 год: Chrome, Firefox, Safari, Opera, Edge и большинство мобильных браузеров, но не IE)
fetch
- это стандартный API, который упрощает асинхронные сетевые вызовы (для которых нам раньше требовалисьXMLHttpRequest
jQuery$.ajax
).Вот традиционная форма:
Если вам передана форма, подобная приведенной выше (или вы создали ее, потому что это семантический html), вы можете
fetch
заключить код в прослушиватель событий, как показано ниже:(Или, если, как и исходный плакат, вы хотите вызвать его вручную без события отправки, просто поместите
fetch
туда код и передайте ссылку наform
элемент вместо использованияevent.target
.)Docs:
Получить: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Другое: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript На этой странице в 2018 году не упоминается выборка (пока). Но здесь упоминается, что трюк target = "myIFrame" устарел. А также есть пример form.addEventListener для события submit.
источник
Я не уверен, что вы понимаете, что делает submit () ...
Когда вы это делаете,
form1.submit();
информация формы отправляется на веб-сервер.WebServer сделает все, что от него требуется, и вернет клиенту новую веб-страницу (обычно это та же страница, но с некоторыми изменениями).
Таким образом, вы никак не можете «поймать» возврат действия form.submit ().
источник
Обратного звонка нет. Это как переход по ссылке.
Если вы хотите записать ответ сервера, используйте AJAX или отправьте его в iframe и возьмите то, что появляется там после
onload()
события iframe .источник
Вы можете
event.preventDefault()
в обработчике кликов для своей кнопки отправки убедиться, чтоsubmit
событие HTML-формы по умолчанию не срабатывает (что и приводит к обновлению страницы).Другой альтернативой было бы использование более хакерской разметки формы: это использование
<form>
и здесь мешаетtype="submit"
желаемому поведению; поскольку они в конечном итоге приводят к событиям щелчка, обновляющим страницу.Если вы хотите по - прежнему использовать
<form>
, и вы не хотите писать пользовательские обработчики нажмите, вы можете использовать JQuery вajax
метод, который абстрагирует всю проблему далеко для вас, подвергнув методы перспективны дляsuccess
,error
и т.д.Напомним, что вы можете решить свою проблему одним из следующих способов:
• предотвращение поведения по умолчанию в функции обработки с помощью
event.preventDefault()
• использование элементов, не имеющих поведения по умолчанию (например,
<form>
)• с использованием jQuery
ajax
(я только что заметил, что этот вопрос из 2008 года, не знаю, почему он появился в моей ленте; во всяком случае, надеюсь, это четкий ответ)
источник
Это мой код для этой проблемы:
источник
Если вы хотите записать вывод запроса AJAX с помощью Chrome, вы можете выполнить следующие простые шаги:
источник
источник
Основываясь на ответе @rajesh_kw ( https://stackoverflow.com/a/22567796/4946681 ), я обрабатываю ошибки публикации формы и успехи:
Я использую
this
так, чтобы моя логика могла быть повторно использована, я ожидаю, что HTML будет возвращен в случае успеха, поэтому я визуализирую его и заменяю текущую страницу, и в моем случае я ожидаю перенаправления на страницу входа, если время сеанса истекло, поэтому Я перехватываю это перенаправление, чтобы сохранить состояние страницы.Теперь пользователи могут войти в систему через другую вкладку и повторить попытку отправки.
источник
Вам нужно использовать AJAX. Отправка формы обычно приводит к загрузке новой страницы браузером.
источник
Вы можете сделать это с помощью javascript и технологии AJAX. Взгляните на jquery и на этот плагин формы . Вам нужно всего лишь включить два js файла, чтобы зарегистрировать обратный вызов для form.submit.
источник
Вы можете сделать это с помощью jQuery и
ajax()
метода:источник
Прежде всего используйте $ (document) .ready (function ()) внутри этого use ('formid'). submit (function (event)), а затем предотвратите действие по умолчанию, которое вызывает отправку формы ajax $ .ajax ({,,, ,}); он примет параметр u, который вы можете выбрать в соответствии с вашими требованиями, затем вызовите функцию success: function (data) {// сделайте все, что вы хотите, мой пример помещает ответ html в div}
источник
Прежде всего нам понадобится serializeObject ();
затем вы делаете простой пост и получаете ответ
источник
У меня есть следующий код, который эффективно запускается с использованием ajax с данными из нескольких частей
источник
Вы можете использовать jQuery.post () и возвращать красиво структурированные ответы JSON с сервера. Это также позволяет вам проверять / дезинфицировать ваши данные непосредственно на сервере, что является хорошей практикой, потому что это более безопасно (и даже проще), чем делать это на клиенте.
Например, если вам нужно отправить html-форму на сервер (в saveprofilechanges.php) с данными пользователя для простой регистрации:
I. Клиентские части:
Часть Ia HTML:
Часть Ib Script:
II. Серверная часть (saveprofilechanges.php):
источник
вы можете сделать это без ajax.
напишите понравившееся ниже.
.. .. ..
а затем в "action.php"
затем после frmLogin.submit ();
читать переменную $ submit_return ..
$ submit_return содержит возвращаемое значение.
удачи.
источник