Altro
Esempio di jQuery Ajax POST con PHP
Sto cercando di inviare dati da un modulo a un database. Ecco il modulo che sto usando:
<form name="foo" action="form.php" method="POST" id="foo">
<label for="bar">A bar</label>
<input id="bar" name="bar" type="text" value="" />
<input type="submit" value="Send" />
</form>
L'approccio tipico sarebbe quello di inviare il modulo, ma questo causa il reindirizzamento del browser. Usando jQuery e Ajax, è possibile catturare tutti i dati del modulo e inviarli a uno script PHP (un esempio, form.php)?
652
3
L'uso di base di
.ajax
sarebbe qualcosa del genere:HTML:
jQuery:
*Nota: Da jQuery 1.8,
.success()
,.error()
e.complete()
sono deprecati in favore di.done()
,.fail()
e.always()
.Nota: ricordate che lo snippet di cui sopra deve essere eseguito dopo il DOM ready, quindi dovreste metterlo all'interno di un gestore
$(document).ready()
(o usare l'abbreviazione$()
).Suggerimento: puoi concatenare i gestori di callback in questo modo:
$.ajax().done().fail().always();
PHP (cioè form.php):
*Nota: sempre sanitizzare i dati inviati, per prevenire iniezioni e altro codice maligno.
Si potrebbe anche usare l'abbreviazione
.post
al posto di.ajax
nel codice JavaScript di cui sopra:Nota: Il codice JavaScript qui sopra è fatto per funzionare con jQuery 1.8 e successive, ma dovrebbe funzionare con le versioni precedenti fino a jQuery 1.5.
Per fare una richiesta Ajax usando jQuery potete farlo con il seguente codice.
HTML:
JavaScript:
Metodo 1
**Metodo 2
Le callback
.success()
,.error()
, e.complete()
sono deprecate a partire da jQuery 1.8. Per preparare il tuo codice alla loro eventuale rimozione, usa invece.done()
,.fail()
, e.always()
.MDN: abort()
. Se la richiesta è già stata inviata, questo metodo interrompe la richiesta.Quindi abbiamo inviato con successo una richiesta Ajax, e ora è il momento di prendere i dati al server.
PHP
Dato che facciamo una richiesta POST in una chiamata Ajax (
tipo: "post"
), ora possiamo prendere i dati usando$_REQUEST
o$_POST
:Si può anche vedere cosa si ottiene nella richiesta POST semplicemente con uno dei due. BTW, assicurati che
$_POST
sia impostato. Altrimenti otterrai un errore.E stai inserendo un valore nel database. Assicurati di sensibilizzare o escludere tutte le richieste (sia che tu abbia fatto un GET o un POST) correttamente prima di fare la query. Il meglio sarebbe usare prepared statements.
E se volete restituire dei dati alla pagina, potete farlo semplicemente facendo l'eco di quei dati come qui sotto.
E poi si può ottenere come:
Ci sono un paio di metodi stenografici. Puoi usare il codice qui sotto. Fa lo stesso lavoro.
Potete usare serialize. Qui sotto c'è un esempio.