Envío de formulario HTML usando Jquery AJAX

Resuelto Oliveira asked hace 11 años • 3 respuestas

Estoy intentando enviar un formulario HTML usando AJAX usando este ejemplo .

Mi código HTML:

<form id="formoid" action="studentFormInsert.php" title="" method="post">
    <div>
        <label class="title">First Name</label>
        <input type="text" id="name" name="name" >
    </div>
    <div>
        <label class="title">Name</label>
        <input type="text" id="name2" name="name2" >
    </div>
    <div>
        <input type="submit" id="submitButton"  name="submitButton" value="Submit">
    </div>
</form>

Mi guión:

<script type="text/javascript">
    $(document).ready(function() { 
        $('#formoid').ajaxForm(function() { 
            alert("Thank you for your comment!"); 
        }); 
    });
</script>

Esto no funciona, ni siquiera recibo el mensaje de alerta y cuando lo envío no quiero redirigir a otra página, solo quiero mostrar el mensaje de alerta.

¿Existe una forma sencilla de hacerlo?

PD: Tengo varios campos, solo he puesto dos como ejemplo.

Oliveira avatar May 02 '13 00:05 Oliveira
Aceptado

Descripción rápida de AJAX

AJAX es simplemente JSON o XML asincrónico (en la mayoría de las situaciones más nuevas, JSON). Debido a que estamos realizando una tarea ASYNC, es probable que brindemos a nuestros usuarios una experiencia de interfaz de usuario más agradable. En este caso específico estamos realizando un envío de FORMULARIO utilizando AJAX.

Muy rápidamente hay 4 acciones web generales GET, POST, PUTy DELETE; estos se corresponden directamente con SELECT/Retreiving DATA, INSERTING DATA, UPDATING/UPSERTING DATAy DELETING DATA. Un formulario web HTML/ASP.Net/PHP/Python predeterminado o cualquier otra formacción es "enviar", que es una acción POST. Debido a esto, a continuación se describirá cómo realizar una POST. A veces, sin embargo, con http es posible que desees una acción diferente y probablemente quieras utilizarla .ajax.

Mi código específicamente para usted (descrito en los comentarios del código):

/* attach a submit handler to the form */
$("#formoid").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /* get the action attribute from the <form action=""> element */
  var $form = $(this),
    url = $form.attr('action');

  /* Send the data using post with element id name and name2*/
  var posting = $.post(url, {
    name: $('#name').val(),
    name2: $('#name2').val()
  });

  /* Alerts the results */
  posting.done(function(data) {
    $('#result').text('success');
  });
  posting.fail(function() {
    $('#result').text('failed');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="formoid" action="studentFormInsert.php" title="" method="post">
  <div>
    <label class="title">First Name</label>
    <input type="text" id="name" name="name">
  </div>
  <div>
    <label class="title">Last Name</label>
    <input type="text" id="name2" name="name2">
  </div>
  <div>
    <input type="submit" id="submitButton" name="submitButton" value="Submit">
  </div>
</form>

<div id="result"></div>
Expandir fragmento


Documentación

De $.postla documentación del sitio web jQuery.

Ejemplo : enviar datos de formulario mediante solicitudes ajax

$.post("test.php", $("#testform").serialize());

Ejemplo : publicar un formulario usando ajax y poner los resultados en un div

<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <form action="/" id="searchForm">
            <input type="text" name="s" placeholder="Search..." />
            <input type="submit" value="Search" />
        </form>
        <!-- the result of the search will be rendered inside this div -->
        <div id="result"></div>
        <script>
            /* attach a submit handler to the form */
            $("#searchForm").submit(function(event) {

                /* stop form from submitting normally */
                event.preventDefault();

                /* get some values from elements on the page: */
                var $form = $(this),
                    term = $form.find('input[name="s"]').val(),
                    url = $form.attr('action');

                /* Send the data using post */
                var posting = $.post(url, {
                    s: term
                });

                /* Put the results in a div */
                posting.done(function(data) {
                    var content = $(data).find('#content');
                    $("#result").empty().append(content);
                });
            });
        </script>
    </body>
</html>

Nota IMPORTANTE

Sin utilizar OAuth o como mínimo HTTPS (TLS/SSL), no utilice este método para datos seguros (números de tarjetas de crédito, SSN, cualquier cosa que esté relacionada con PCI, HIPAA o inicio de sesión).

abc123 avatar May 01 '2013 18:05 abc123
var postData = "text";
      $.ajax({
            type: "post",
            url: "url",
            data: postData,
            contentType: "application/x-www-form-urlencoded",
            success: function(responseData, textStatus, jqXHR) {
                alert("data saved")
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(errorThrown);
            }
        })
Varun S avatar May 01 '2013 18:05 Varun S

Tenga en cuenta que $('FORM').serialize() es fácil de usar, ¡pero NO FUNCIONARÁ para ENTRADAS/cargas de ARCHIVOS!

Esto funcionará:

<form id="myform">
   <input type="file" name="somefile">
   <button type="submit">Submit</button>
</script>

// jquery.form.min.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.3.0/jquery.form.min.js">

<script>
// register form for ajax
$('#myform').ajaxForm(function(submit_response) {
    console.log(submit_response);
});
</script>
Martin Zvarík avatar Sep 07 '2017 17:09 Martin Zvarík