Invio del modulo HTML utilizzando Jquery AJAX


107

Sto cercando di inviare un modulo HTML utilizzando AJAX utilizzando questo esempio .

Il mio codice 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>

Il mio script:

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

Non funziona, non ricevo nemmeno il messaggio di avviso e quando invio non desidero reindirizzare a un'altra pagina, voglio solo mostrare il messaggio di avviso.

C'è un modo semplice per farlo?

PS: ho diversi campi, ne ho solo messi due come esempio.


non puoi eliminare il componente html "form"? e usa jquery per pubblicare sul gestore dei clic del pulsante come
harshvchawla

Risposte:


178

Descrizione rapida di AJAX

AJAX è semplicemente JSON o XML asincrono (nella maggior parte delle situazioni più recenti JSON). Poiché stiamo eseguendo un'attività ASYNC, probabilmente forniremo ai nostri utenti un'esperienza dell'interfaccia utente più piacevole. In questo caso specifico stiamo inviando un FORM utilizzando AJAX.

Molto velocemente ci sono 4 azioni di web generali GET, POST, PUT, e DELETE; questi corrispondono direttamente SELECT/Retreiving DATA, INSERTING DATA, UPDATING/UPSERTING DATA, e DELETING DATA. Un modulo web HTML / ASP.Net predefinito / PHP / Python o qualsiasi altra formazione è "invia", che è un'azione POST. Per questo motivo, quanto segue descriverà tutto come eseguire un POST. A volte, tuttavia, con http potresti volere un'azione diversa e probabilmente vorrai utilizzarla .ajax.

Il mio codice specifico per te (descritto nei commenti sul codice):

/* 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>


Documentazione

Dalla $.postdocumentazione del sito Web jQuery .

Esempio : inviare i dati del modulo utilizzando le richieste ajax

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

Esempio : posta un modulo utilizzando ajax e inserisci i risultati in 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

Senza utilizzare OAuth o almeno HTTPS (TLS / SSL), non utilizzare questo metodo per dati protetti (numeri di carta di credito, SSN, tutto ciò che è PCI, HIPAA o relativo all'accesso)


@ abc123 come posso impostare l'intestazione della richiesta di autorizzazione in questo? Ho provato beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "*****"); xhr.setRequestHeader("contentType", "application/json;charset=UTF-8"); },ma questo non imposta alcuna intestazione
mahendra kawde

@mahendrakawde dovresti utilizzare di $.ajaxcui posso scrivere un esempio se lo desideri, ma questa è davvero una domanda separata
abc123

@ abc123 ho un thread avviato per questo. lascia che lo condivida con te.
mahendra kawde

1
possiamo evitare di usare il form post e semplicemente fare jquery post sul gestore dei clic di un pulsante (che è un pulsante html non parte di alcun div del modulo). In questo modo neanche event.preventdefault sarà necessario?
harshvchawla

1
@harshvchawla ovviamente, ma la tua query di selezione per le variabili estratte dall'elemento html è diversa
abc123

26
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);
            }
        })

1
la funzione di successo / completamento avverrà quando la chiamata è completata e riceve 200 OK dal server
Varun S

ciao ho messo: $ (documento) .ready (function () {$ ('# formoid'). submit (function () {var postData = "text"; $ .ajax ({type: "post", url: " url ", dati: postData, contentType:" studentFormInsert.php ", successo: funzione (responseData, textStatus, jqXHR) {alert (" dati salvati ")}, errore: funzione (jqXHR, textStatus, errorThrown) {console.log ( errorThrown);}})}); non funziona attualmente .. è necessaria alcuna modifica sul lato php?
Oliveira

4
buon esempio e ben scritto, si prega di inviare qualche risposta con esso anche se non solo codice di esempio senza spiegazione.
abc123

2
Non capisco come collegarlo al modulo che desidero postare
Piotr Kamoda

Perché non c'è spiegazione?
Rich

3

Se aggiungi:

jquery.form.min.js

Puoi semplicemente fare questo:

<script>
$('#myform').ajaxForm(function(response) {
  alert(response);
});

// this will register the AJAX for <form id="myform" action="some_url">
// and when you submit the form using <button type="submit"> or $('myform').submit(), then it will send your request and alert response
</script>

NOTA:

Potresti usare il semplice $ ('FORM'). Serialize () come suggerito nel post sopra, ma questo non funzionerà per FILE INPUT ... ajaxForm () lo farà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.