Risposte:
Dipende se si sta inviando il modulo normalmente o tramite una chiamata AJAX. Puoi trovare molte informazioni su jquery.com , inclusa la documentazione con esempi. Per inviare un modulo normalmente, controlla il submit()
metodo su quel sito. Per AJAX , ci sono molte diverse possibilità, anche se probabilmente si desidera utilizzare il metodo ajax()
o post()
. Si noti che post()
è davvero solo un modo conveniente per chiamare il ajax()
metodo con un'interfaccia semplificata e limitata.
Una risorsa fondamentale, una che uso ogni giorno, che dovresti aggiungere ai segnalibri è Come funziona jQuery . Ha tutorial sull'uso di jQuery e la navigazione a sinistra dà accesso a tutta la documentazione.
Esempi:
Normale
$('form#myForm').submit();
AJAX
$('input#submitButton').click( function() {
$.post( 'some-url', $('form#myForm').serialize(), function(data) {
// ... do something with response from server
},
'json' // I expect a JSON response
);
});
$('input#submitButton').click( function() {
$.ajax({
url: 'some-url',
type: 'post',
dataType: 'json',
data: $('form#myForm').serialize(),
success: function(data) {
// ... do something with the data...
}
});
});
Si noti che i metodi ajax()
e post()
sopra sono equivalenti. Ci sono parametri aggiuntivi che puoi aggiungere alla ajax()
richiesta per gestire errori, ecc.
$('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData
. Nota: potrebbe essere necessario codificare l'URL utilizzando questi ultimi due encodeURIComponent()
. OPPURE - potresti cambiare per utilizzare la codifica JSON su entrambe le estremità, ma dovrai inserire i dati del modulo in una struttura di dati JavaScript con i tuoi dati extra e serializzarli. In tal caso probabilmente serializeArray
Si dovrà utilizzare $("#formId").submit()
.
Generalmente lo chiameresti all'interno di una funzione.
Per esempio:
<input type='button' value='Submit form' onClick='submitDetailsForm()' />
<script language="javascript" type="text/javascript">
function submitDetailsForm() {
$("#formId").submit();
}
</script>
Puoi ottenere maggiori informazioni al riguardo sul sito Web di Jquery .
quando hai un modulo esistente, che ora dovrebbe funzionare con jquery - ajax / post ora potresti:
fai le tue cose
$(function() {
//hang on event of form with id=myform
$("#myform").submit(function(e) {
//prevent Default functionality
e.preventDefault();
//get the action-url of the form
var actionurl = e.currentTarget.action;
//do your own request an handle the results
$.ajax({
url: actionurl,
type: 'post',
dataType: 'application/json',
data: $("#myform").serialize(),
success: function(data) {
... do something with the data...
}
});
});
});
Si noti che, affinché la serialize()
funzione funzioni nell'esempio precedente, tutti gli elementi del modulo devono avere il loro name
attributo definito.
Esempio di modulo:
<form id="myform" method="post" action="http://example.com/do_recieve_request">
<input type="text" size="20" value="default value" name="my_input_field">
..
.
</form>
@PtF: i dati vengono inviati utilizzando POST in questo esempio, quindi ciò significa che è possibile accedere ai dati tramite
$_POST['dataproperty1']
, dove dataproperty1 è un "nome-variabile" nel tuo json.
qui la sintassi di esempio se si utilizza CodeIgniter:
$pdata = $this->input->post();
$prop1 = $pdata['prop1'];
$prop1 = $pdata['prop2'];
In jQuery preferirei quanto segue:
$("#form-id").submit()
Ma ancora una volta, non hai davvero bisogno di jQuery per eseguire questa attività - basta usare JavaScript normale:
document.getElementById("form-id").submit()
Dal manuale: jQuery Doc
$("form:first").submit();
Per informazioni
se qualcuno lo utilizza
$('#formId').submit();
Non fare qualcosa del genere
<button name = "submit">
Ci sono volute molte ore per scoprire che submit () non funzionerà in questo modo.
"sumit"
errore di battitura sulla parola chiave rende poco chiaro se l'errore di battitura non è intenzionale nella risposta o era correlato al problema. Vuoi dire che un pulsante chiamato "submit"
rovina jquery form submit ()? O vuoi dire che il problema era che hai dato il nome del pulsante di invio anziché lo standard type="submit"
?
Usalo per inviare il modulo utilizzando jquery. Ecco il link http://api.jquery.com/submit/
<form id="form" method="post" action="#">
<input type="text" id="input">
<input type="button" id="button" value="Submit">
</form>
<script type="text/javascript">
$(document).ready(function () {
$( "#button" ).click(function() {
$( "#form" ).submit();
});
});
</script>
button
al pulsante per assicurarsi che il modulo non venga inviato (poiché non tutti i browser trattano i pulsanti senza tipi nello stesso modo).
questo invierà un modulo con il preloader:
var a=$('#yourform').serialize();
$.ajax({
type:'post',
url:'receiver url',
data:a,
beforeSend:function(){
launchpreloader();
},
complete:function(){
stopPreloader();
},
success:function(result){
alert(result);
}
});
ho qualche trucco per rendere un post dei dati del modulo riformato con metodo casuale http://www.jackart4.com/article.html
$("form:first").submit();
Vedi eventi / invia .
Tieni presente che se hai già installato un listener di eventi di invio per il tuo modulo, l'inner call to submit ()
jQuery('#<form-id>').submit( function(e){
e.preventDefault();
// maybe some validation in here
if ( <form-is-valid> ) jQuery('#<form-id>').submit();
});
non funzionerà nel tentativo di installare un nuovo listener di eventi per l'evento di invio di questo modulo (che non riesce). Quindi devi accedere all'elemento HTML stesso (scartalo da jQquery) e chiamare submit () su questo elemento direttamente:
jQuery('#<form-id>').submit( function(e){
e.preventDefault();
// note the [0] array access:
if ( <form-is-valid> ) jQuery('#<form-id>')[0].submit();
});
Puoi anche usare il plugin del modulo jquery per inviare usando anche ajax:
Si noti che in Internet Explorer ci sono problemi con i moduli creati dinamicamente. Un modulo creato in questo modo non verrà inviato in IE (9):
var form = $('<form method="post" action="/test/Delete/">' +
'<input type="hidden" name="id" value="' + myid + '"></form>');
$(form).submit();
Per farlo funzionare in IE, crea l'elemento del modulo e allegalo prima di inviarlo in questo modo:
var form = document.createElement("form");
$(form).attr("action", "/test/Delete")
.attr("method", "post");
$(form).html('<input type="hidden" name="id" value="' + myid + '" />');
document.body.appendChild(form);
$(form).submit();
document.body.removeChild(form);
Creare il modulo come nell'esempio 1 e quindi collegarlo non funzionerà: in IE9 genera un errore JScript DOM Exception: HIERARCHY_REQUEST_ERR (3)
Props to Tommy W @ https://stackoverflow.com/a/6694054/694325
Le soluzioni finora richiedono di conoscere l'ID del modulo.
Usa questo codice per inviare il modulo senza conoscere l'ID:
function handleForm(field) {
$(field).closest("form").submit();
}
Ad esempio, se si desidera gestire l'evento click per un pulsante, è possibile utilizzare
$("#buttonID").click(function() {
handleForm(this);
});
potresti usarlo in questo modo:
$('#formId').submit();
O
document.formName.submit();
IE trucco per forme dinamiche:
$('#someform').find('input,select,textarea').serialize();
Raccomando una soluzione generica in modo da non dover aggiungere il codice per ogni modulo. Utilizzare il plug-in del modulo jquery (http://jquery.malsup.com/form/) e aggiungere questo codice.
$(function(){
$('form.ajax_submit').submit(function() {
$(this).ajaxSubmit();
//validation and other stuff
return false;
});
});
Ho anche usato quanto segue per inviare un modulo (senza effettivamente inviarlo) tramite Ajax:
jQuery.get("process_form.php"+$("#form_id").serialize(), {},
function() {
alert("Okay!");
});
$.post
esplicitamente decostruiscono e ricostruiscono il modulo per generare dati da inviare. Grazie!