No podrá hacer esto fácilmente con javascript simple. Cuando publica un formulario, las entradas del formulario se envían al servidor y su página se actualiza: los datos se manejan en el lado del servidor. Eso es elsubmit()
función en realidad no devuelve nada, solo envía los datos del formulario al servidor.
Si realmente quería obtener la respuesta en Javascript (sin la página refrescante), entonces usted tendrá que utilizar AJAX, y cuando se empieza a hablar sobre el uso de AJAX, usted necesita utilizar una biblioteca. jQuery es, con mucho, el más popular y mi favorito personal. Hay un gran complemento para jQuery llamado Form que hará exactamente lo que parece que quieres.
Así es como usarías jQuery y ese complemento:
$('#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);
Una alternativa de Ajax es establecer un invisible
<iframe>
como el objetivo de su formulario y leer su contenido<iframe>
en suonload
controlador. ¿Pero por qué molestarse cuando hay Ajax?Nota: Solo quería mencionar esta alternativa ya que algunas de las respuestas afirman que es imposible lograr esto sin Ajax.
fuente
<iframe>
POST (con devolución de llamada aparent
). Para descargas y cargas por igual ...La forma Javascript no jQuery vanilla, extraída del comentario de 12me21:
Para
POST
's, el tipo de contenido predeterminado es "application / x-www-form-urlencoded", que coincide con lo que enviamos en el fragmento anterior. Si desea enviar "otras cosas" o modificarlo de alguna manera, vea aquí algunos detalles esenciales.fuente
<input type='button' onclick="submitForm(); return false;">
o podría agregar un detector de eventos para el evento 'enviar' como la respuesta de Marcus: stackoverflow.com/a/51730069/32453Lo estoy haciendo de esta manera y está funcionando.
fuente
event.preventDefault();
(event
= primer argumento de la función de envío) en lugar dereturn false
. Devolver false no impedirá simplemente que el navegador envíe el formulario, sino que también evitará que ocurran otros efectos secundarios que podrían ser importantes. No son un montón de preguntas relacionadas a esto.FormData($("myform")[0])
si está intentando una entrada tipo = carga de archivo.event.target.action
y en$(event.target).serialize()
lugar de$('#form').attr('action')
y$('#form').serialize()
.Futuros buscadores de internet:
Para los nuevos navegadores (a partir de 2018: Chrome, Firefox, Safari, Opera, Edge y la mayoría de los navegadores móviles, pero no IE),
fetch
es una API estándar que simplifica las llamadas de red asíncronas (para las que solíamos necesitarXMLHttpRequest
o jQuery$.ajax
).Aquí hay una forma tradicional:
Si se le entrega un formulario como el anterior (o lo creó porque es html semántico), puede envolver el
fetch
código en un detector de eventos como se muestra a continuación:(O, si como el póster original desea llamarlo manualmente sin un evento de envío, simplemente coloque el
fetch
código allí y pase una referencia alform
elemento en lugar de usarloevent.target
).Documentos:
Recuperar: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Otro: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript Esa página en 2018 no menciona fetch (todavía). Pero menciona que el truco target = "myIFrame" está en desuso. Y también tiene un ejemplo de form.addEventListener para el evento 'submit'.
fuente
No estoy seguro de que entiendas lo que submit () hace ...
Cuando tu lo hagas
form1.submit();
la información del formulario se envía al servidor web.El servidor web hará lo que se supone que debe hacer y devolverá una nueva página web al cliente (generalmente la misma página con algo cambiado).
Por lo tanto, no hay forma de "atrapar" el retorno de una acción form.submit ().
fuente
No hay devolución de llamada. Es como seguir un enlace.
Si desea capturar la respuesta del servidor, use AJAX o publíquela en un Iframe y tome lo que aparece allí después del
onload()
evento del iframe .fuente
En
event.preventDefault()
el controlador de clics, puede hacer clic en el botón Enviar para asegurarse de que elsubmit
evento predeterminado del formulario HTML no se active (que es lo que lleva a la actualización de la página).Otra alternativa sería usar un marcado de forma más pirata: es el uso de
<form>
ytype="submit"
eso se está interponiendo en el comportamiento deseado aquí; ya que estos conducen finalmente a eventos de clic que actualizan la página.Si desea utilizar todavía
<form>
, y no desea escribir clic encargo manipuladores, puede utilizar jQueryajax
método, que abstrae todo el problema de distancia para usted, se exponen métodos prometedores parasuccess
,error
, etc.Para recapitular, puede resolver su problema:
• evitar el comportamiento predeterminado en la función de manejo mediante el uso
event.preventDefault()
• usar elementos que no tienen un comportamiento predeterminado (p. Ej.
<form>
)• usando jQuery
ajax
(Acabo de notar que esta pregunta es de 2008, no estoy seguro de por qué apareció en mi feed; de todos modos, espero que esta sea una respuesta clara)
fuente
Este es mi código para este problema:
fuente
En caso de que desee capturar la salida de una solicitud AJAX usando Chrome, puede seguir estos simples pasos:
fuente
fuente
Sobre la base de la respuesta de @rajesh_kw ( https://stackoverflow.com/a/22567796/4946681 ), manejo los errores y el éxito de la publicación de formularios:
Hago uso de
this
para que mi lógica sea reutilizable, espero que el HTML se devuelva con éxito, así que lo represento y reemplazo la página actual, y en mi caso espero una redirección a la página de inicio de sesión si la sesión se agota, así que Intercepto esa redirección para preservar el estado de la página.Ahora los usuarios pueden iniciar sesión a través de otra pestaña e intentar enviar nuevamente.
fuente
Necesitas estar usando AJAX. Al enviar el formulario, generalmente el navegador carga una nueva página.
fuente
Puede hacerlo utilizando javascript y la tecnología AJAX. Eche un vistazo a jquery y a este formulario . Solo necesita incluir dos archivos js para registrar una devolución de llamada para el formulario.submit.
fuente
Puede lograr esto usando jQuery y el
ajax()
método:fuente
en primer lugar, use $ (document) .ready (function ()) dentro de este uso ('formid'). submit (function (event)) y luego evite la acción predeterminada después de llamar al formulario ajax $ .ajax ({,,, ,}); tomará el parámetro que puede elegir según sus requisitos y luego llame al éxito de la función: función (datos) {// haga lo que quiera mi ejemplo para poner la respuesta html en div}
fuente
En primer lugar, necesitaremos serializeObject ();
luego haces una publicación básica y obtienes respuesta
fuente
Tengo el siguiente código ejecutado perfectamente usando ajax con datos de formulario de varias partes
fuente
Puede usar jQuery.post () y devolver respuestas JSON bien estructuradas del servidor. También le permite validar / desinfectar sus datos directamente en el servidor, lo cual es una buena práctica porque es más seguro (e incluso más fácil) que hacerlo en el cliente.
Por ejemplo, si necesita publicar un formulario html en el servidor (para guardar el perfil del perfil) con los datos del usuario para un registro simple:
I. Piezas del cliente:
Ia parte HTML:
Ib Parte del guión:
II Parte del servidor (saveprofilechanges.php):
fuente
puedes hacer eso sin ajax.
escribe tu me gusta a continuación.
.. .. ..
y luego en "action.php"
luego después de frmLogin.submit ();
leer variable $ submit_return ..
$ submit_return contiene el valor de retorno.
buena suerte.
fuente