refrescar recargar quedarse pagina misma hacer formulario enviar despues datos boton actualizar php javascript html forms

php - quedarse - Enviar formulario sin recargar la página



php sin recargar pagina (16)

Envío de formulario sin recargar la página y obtener el resultado de los datos enviados en la misma página

Aquí hay algunos de los códigos que encontré en Internet que resuelven este problema

Archivo de índice:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/core.js"> </script> <script type="text/javascript"> function clickButton(){ var name=document.getElementById(''name'').value; var descr=document.getElementById(''descr'').value; $.ajax({ type:"post", url:"server_action.php", data: { ''name'' :name, ''descr'' :descr }, cache:false, success: function (html) { alert(''Data Send''); $(''#msg'').html(html); } }); return false; } </script> <form > <input type="" name="name" id="name"> <input type="" name="descr" id="descr"> <input type="submit" name="" value="submit" onclick="return clickButton();"> </form> <p id="msg"></p>

server_action.php

<?php $name = $_POST[''name'']; $descr = $_POST[''descr'']; echo $name; echo $descr; ?>

Etiquetas: php ajax jquery serverside

Tengo un sitio web de clasificados, y en la página donde se muestran los anuncios, estoy creando un formulario de "Enviar una sugerencia a un amigo" ...

Entonces, cualquiera que quiera puede enviar una sugerencia del anuncio a la dirección de correo electrónico de algunos amigos.

Supongo que el formulario debe enviarse a una página php ¿verdad?

<form name=''tip'' method=''post'' action=''tip.php''> Tip somebody: <input name="tip_email" type="text" size="30" onfocus="tip_div(1);" onblur="tip_div(2);"/> <input type="submit" value="Skicka Tips"/> <input type="hidden" name="ad_id" /> </form>

Al enviar el formulario, la página se vuelve a cargar ... No quiero eso ...

¿Hay alguna manera de hacer que no vuelva a cargar y todavía enviar el correo? Preferiblemente sin ajax o jquery ...

Gracias


¿Has intentado usar un iFrame? No ajax, y la página original no se cargará.

Puede mostrar el formulario de envío como una página separada dentro del iframe, y cuando se envía la página externa / contenedor no se volverá a cargar. Esta solución no hará uso de ningún tipo de ajax.


Aquí hay algunos jQuery para publicar en una página php y recuperar html:

$(''form'').submit(function() { $.post(''tip.php'', function(html) { // do what you need in your success callback } return false; });


Deberá enviar una solicitud ajax para enviar el correo electrónico sin tener que volver a cargar la página. Eche un vistazo a http://api.jquery.com/jQuery.ajax/

Tu código debe ser algo así como:

$(''#submit'').click(function() { $.ajax({ url: ''send_email.php'', type: ''POST'', data: { email: ''[email protected]'', message: ''hello world!'' }, success: function(msg) { alert(''Email Sent''); } }); });

El formulario se enviará en segundo plano a la página send_email.php , que deberá gestionar la solicitud y enviar el correo electrónico.


Es imprescindible tomar la ayuda de jquery-ajax en este caso. Sin ajax , actualmente no hay solución.

Primero, llame a una función de JavaScript cuando se envíe el formulario. Simplemente configure onsubmit="func()" . Incluso si se llama a la función, se realizará la acción predeterminada de la presentación. Si se realiza, no habría forma de evitar que la página se actualice o redirija. Entonces, la siguiente tarea es evitar la acción predeterminada. Inserta la siguiente línea al comienzo de func() .

event.preventDefault()

Ahora, no habrá redirección ni actualización. Entonces, simplemente haga una llamada ajax desde func() y haga lo que quiera cuando termine la llamada.

Ejemplo:

Formar:

<form id="form-id" onsubmit="func()"> <input id="input-id" type="text"> </form>

Javascript:

function func(){ event.preventDefault(); var newValue = $(''#input-field-id'').val(); $.ajax({ type: ''POST'', url: ''...'', data: {...}, datatype: ''JSON'', success: function(data){...}, error: function(){...}, }); }


Esto debería resolver tu problema.
En este código, después del botón de enviar haga clic en llamar a jquery ajax y pasamos la url para publicar
tipo POST / GET
datos: información de datos puede seleccionar campos de entrada o cualquier otro.
éxito: devolución de llamada si todo está bien desde el servidor
texto del parámetro de función, html o json, respuesta del servidor
en caso de error, puede escribir advertencias de escritura si los datos que obtuvo están en algún tipo de estado, etc. o ejecuta tu código qué hacer a continuación.

<form id=''tip''> Tip somebody: <input name="tip_email" id="tip_email" type="text" size="30" onfocus="tip_div(1);" onblur="tip_div(2);"/> <input type="submit" id="submit" value="Skicka Tips"/> <input type="hidden" id="ad_id" name="ad_id" /> </form> <script> $( "#tip" ).submit(function( e ) { e.preventDefault(); $.ajax({ url: tip.php, type:''POST'', data: { tip_email: $(''#tip_email'').val(), ad_id: $(''#ad_id'').val() }, success: function(msg) { alert(''Email Sent''); } }); }); </script>


He encontrado lo que creo que es una manera más fácil. Si coloca un Iframe en la página, puede redirigir la salida de la acción allí y hacer que se muestre. No puedes hacer nada, por supuesto. En ese caso, puede configurar la visualización del iframe en none.

<iframe name="votar" style="display:none;"></iframe> <form action="tip.php" method="post" target="votar"> <input type="submit" value="Skicka Tips"> <input type="hidden" name="ad_id" value="2"> </form>


Hice algo similar al jquery anterior, pero necesitaba restablecer los datos de mi formulario y los lienzos de adjuntos gráficos. Así que aquí es lo que se me ocurrió:

<script> $(document).ready(function(){ $("#text_only_radio_button_id").click(function(){ $("#single_pic_div").hide(); $("#multi_pic_div").hide(); }); $("#pic_radio_button_id").click(function(){ $("#single_pic_div").show(); $("#multi_pic_div").hide(); }); $("#gallery_radio_button_id").click(function(){ $("#single_pic_div").hide(); $("#multi_pic_div").show(); }); $("#my_Submit_button_ID").click(function() { $("#single_pic_div").hide(); $("#multi_pic_div").hide(); var url = "script_the_form_gets_posted_to.php"; $.ajax({ type: "POST", url: url, data: $("#html_form_id").serialize(), success: function(){ document.getElementById("html_form_id").reset(); var canvas=document.getElementById("canvas"); var canvasA=document.getElementById("canvasA"); var canvasB=document.getElementById("canvasB"); var canvasC=document.getElementById("canvasC"); var canvasD=document.getElementById("canvasD"); var ctx=canvas.getContext("2d"); var ctxA=canvasA.getContext("2d"); var ctxB=canvasB.getContext("2d"); var ctxC=canvasC.getContext("2d"); var ctxD=canvasD.getContext("2d"); ctx.clearRect(0, 0,480,480); ctxA.clearRect(0, 0,480,480); ctxB.clearRect(0, 0,480,480); ctxC.clearRect(0, 0,480,480); ctxD.clearRect(0, 0,480,480); } }); return false; }); }); </script>

Eso funciona bien para mí, para su aplicación de solo un formulario html, podemos simplificar este código jquery así:

<script> $(document).ready(function(){ $("#my_Submit_button_ID").click(function() { var url = "script_the_form_gets_posted_to.php"; $.ajax({ type: "POST", url: url, data: $("#html_form_id").serialize(), success: function(){ document.getElementById("html_form_id").reset(); } }); return false; }); }); </script>


La forma más rápida y sencilla es usar un iframe. Pon un marco en la parte inferior de tu página.

<iframe name="frame"></iframe>

Y en tu forma haz esto.

<form target="frame"> </form>

y para hacer que el marco sea invisible en tu CSS.

iframe{ display: none; }


La página se volverá a cargar si no quieres usar javascript


Necesitará usar JavaScript sin resultar en un iframe (enfoque desagradable).

Puedes hacerlo en JavaScript; usar jQuery lo hará sin dolor.

Sugiero que revises AJAX y Publicaciones.


Puede intentar establecer el atributo de destino de su formulario en un iframe oculto, de modo que la página que contiene el formulario no se vuelva a cargar.

Lo intenté con la carga de archivos (que sabemos que no se puede hacer a través de AJAX), y funcionó muy bien.


Si está enviando a la misma página donde está el formulario, podría escribir las etiquetas de formulario sin una acción y se enviará, como este

<form method=''post''> <!-- you can see there is no action here-->


Usted usa AJAX o usted

  • crear y anexar un iframe al documento
  • establece el nombre iframes en ''foo''
  • establecer los formularios de destino a ''foo''
  • enviar
  • tener la acción de formularios render javascript con ''parent.notify (...)'' para dar feedback
  • opcionalmente puede eliminar el iframe

así es como PUEDE funcionar sin jQuery y AJAX, y funciona muy bien con un simple iFrame. ME ENCANTA, trabaja en Opera10, FF3 e IE6. Gracias a algunos de los carteles anteriores que me indican la dirección correcta, esa es la única razón por la que estoy publicando aquí:

<select name="aAddToPage[65654]" onchange=" if (bCanAddMore) { addToPage(65654,this); } else { alert(''Could not add another, wait until previous is added.''); this.options[0].selected = true; }; " /> <option value="">Add to page..</option> [more options with values here]</select> <script type="text/javascript"> function addToPage(iProduct, oSelect){ iPage = oSelect.options[oSelect.selectedIndex].value; if (iPage != "") { bCanAddMore = false; window.hiddenFrame.document.formFrame.iProduct.value = iProduct; window.hiddenFrame.document.formFrame.iAddToPage.value = iPage; window.hiddenFrame.document.formFrame.submit(); } } var bCanAddMore = true;</script> <iframe name="hiddenFrame" style="display:none;" src="frame.php?p=addProductToPage" onload="bCanAddMore = true;"></iframe>

el código php que genera la página que se está llamando arriba:

if( $_GET[''p''] == ''addProductToPage'' ){ // hidden form processing if(!empty($_POST[''iAddToPage''])) { //.. do something with it.. } print('' <html> <body> <form name="formFrame" id="formFrameId" style="display:none;" method="POST" action="frame.php?p=addProductToPage" > <input type="hidden" name="iProduct" value="" /> <input type="hidden" name="iAddToPage" value="" /> </form> </body> </html> ''); }


function Foo(){ event.preventDefault(); $.ajax( { url:"<?php echo base_url();?>Controllername/ctlr_function", type:"POST", data:''email=''+$("#email").val(), success:function(msg) { alert(''You are subscribed''); } } ); }

Intenté muchas veces una buena solución y la respuesta de @taufique me ayudó a llegar a esta respuesta.

NB : No te olvides de poner event.preventDefault(); al comienzo del cuerpo de la función.