Solitamente evito turorial e articoli troppo tecnici visto che “saper spiegare” è una cosa più difficile di quanto sembri. Questo volta però ho realizzato uno scriptino che permetterà a chiunque (o quasi) di implementare l’invio di un form in Ajax senza bisogno di particolari abilità.
Premesse
Per chi non lo sapesse, Ajax è una tecnica di sviluppo web che tramite l’oggetto XMLHttpRequest permette l’invio e ricezione di dati senza bisogno di ricaricare la pagina con evidenti benifici in termini di velocità e usabilità del sito.
L’implementazione è più facile di quanto sembri anche per form già esistenti; è inoltre possile gestire anche l’eventualità che il browser abbia i javascript disabilitati redirigendolo in un’apposita pagina.
A differenza di molti script che si trovano in rete,ho cercato di parametrizzare i campi fondamentali così da poter specificare il messaggio di ‘Loading’ e l’ID del DIV in cui visualizzare la risposta del Form.
1. Lo Script
Innanzi tutto avrete bisogno di questo script che dovrete uploadare nel vostro sito e linkare nella sezione head della pagina del form in questo modo:
<script src="js/ajaxsbmt.js" type="text/javascript"></script>
Non dimenticate di modificare il percorso del JS con quello della cartella in cui l’avete uploadato.
2. Il Form
L’unica cosa da aggiungere rispetto ad un form classico, è il richiamo alla funzione xmlhttpPost associata all’evento onsubmit.
Il richiamo alla funzione xmlhttpPost va personalizzata secondo le vostre esigenze:
- Il primo paramentro (‘response_ajax.asp’) si riferisce alla pagina che riceverà i dati del form e risponderà
- Il secondo parametro (‘MyForm’) si riferisce al nome del form da cui prelevare i dati
- Il terzo parametro (‘MyResult’) si riferisce all’ID del DIV che conterrà la risposta del form ed il messaggio di attesa.
- Il quarto paramentro (‘Wait…’) si riferisce al messaggio di attesa che apparità durante l’invio dei dati. Potete anche inserire del codice HTML magari per far apparire un’immagine di caricamento.
<form name="MyForm" action="response_normal.asp" method="post" onsubmit="xmlhttpPost('response_ajax.asp', 'MyForm', 'MyResult', 'Wait...'); return false;">
<input type="text" name="sample_text" value="Test" />
<input type="submit" name="send_button" value="Send" />
</form>
La cosa interessante è che nel caso in cui il browser avesse il javascript disabilitati, i dati verranno inviati comunque alla pagina specificata nella proprietà action rendendo questo script di fatto accessibile.
4. Conclusioni
Visto quanto è facile realizzare un form “moderno”? Ho cercato di semplificare la questione il più possibile ma se avete dubbi, domande o problemi, lasciate un commento.
Lo script è stato testato con Firefox 2 e Internet Explorer 6 ma se avete la possibilità di testarlo con altri browser vi prego di comunicarmelo.
|
|
Download: Script Ajax form submit (3.33KB) Data: 21/02/2010 Click: 1449 Descrizione: |
QUI trovate una DEMO
NON DIMENTICATE DI VOTARMI SU DIGG ->
5. Immagini per il ‘Loading’
La fase di invio/attesa dati può essere personalizzata con una bella gif, eccovene alcune.
Ricordate che passando del codice HTML tramite la funzione xmlhttpPost i doppi apici (“) devono essere sostituti con lo slash e l’apice (\’).

![]()
![]()
Aggiungo in fine questo fantastico sito AjaxLoad che permette in perfetto stile web 2.0 di crearsi la propria immagine di caricamento.

{ 68 commenti… leggili aggiungine uno }
← Commenti precedenti
Si anche io faccio la stessa cosa
Ma la pagina contenente il form viene ricaricata nel punto dove c’è il form o all’inizio? per capirci es questa pagina è molto lunga, se io invio il commento mi viene ricaricata la pagina qui dove c’è il form o in cima?
Il bello è che proprio non viene ricaricato nulla. Semmai si riceve la riposta dalla pagina e viene visualizzata nel DIV con l’ID specificato nella chiamata del Form (Es. MyResult)
In questa pagina, ho utilizzato una versione evoluta:
1. Invio i dati
2. Ricevo la risposta dal form (Es. Dati inviati correttamente)e la visualizzo quì sotto.
3. Se tutto va bene faccio una chiamata (ricarico tutti i commenti) ad un’altra pagina e la visualizzo in un altro DIV ancora.
ciao, e complimenti,
ma ho una curiosità.Come mai nonostante processi in post lo script visualizza una querystring nella barra del browser?
In questo caso mi passa in chiaro user e password.
Volevo integrare ajax in uno script che uso di login.
Attualmente io verifico le credenziali e poi eseguo un response redirect
Con questo script ajax se ho notato che non mi esegue il redirect ma mi processa la pagina nella stessa.
E’ giusto?
Si puo fare un redirect ?
Grazie
Ciao
Lo script, se non modifcato, esegue un post e non dovrebbe vedersi alcun paramentro di querystring.
Per quanto riguarda il redirect non ci dovrebbero essere problemi ma non l’ho mai provato.
Il redirect puoi farlo solo nella pagina che richiama lo script, e non nella pagina che elabora i dati.
Per un redirect della pagina che ospita il form dovresti modificare qualcosina nello script di Simone.
Ciao, ho usato il tuo script ajax in diverse occasioni e sempre con successo. Adesso il mio problema è che non riesco ad utilizzarlo all’interno di joomla.
Ho importato correttamente lo script nell’header della pagina ed ho scritto il sorgente dell’articolo (contenuto di joomla) includendo gli attributi necessari nel tag
Ciao, purtroppo il link al file non funziona più, non è che potresti rimediare?
Grazie per la guida
Come non detto, ricliccando è uscito, boh!
Grazie ancora
A me sembra che funzioni. Ti si apri direttamente il .js, fai “salva con nome” dal menu “file” del browser.
Sìsì, infatti riprovando subito dopo aver scritto il commento si è aperto, mentre la prima volta mi aveva reindirizzato alla home del blog
ciao a tutti ho il seguente problema … il messaggio sia esso testo o immagine non mi viene visualizzato … lavorando in locale ho inserito nel file .php che processa il tutto la funzioncina sleep() settata a 5 secondi in modo tale che ci sia il tempo fisico per visualizzare il messaggio/immagine!
Nulla mi viene restituito il valore del file .php ma nessun messaggio d’attesa
Aggiungo solo che il problema si presenta su chrome e non ho idea del perchè lo faccia
Cmq ti consiglio di provare anche con la funzione setTimeout, ma non sò se fa al caso tuo.
Per poterti aiutare dovresti postare il codice.
il codice è il seguente
<form method="post" id="addcommento" action="inserisci_commento.php" onsubmit="xmlhttpPost('inserisci_commento.php', 'addcommento', 'risultatocommento', '’); return false;”>
….
il problema credo sia di compatibilità e quindi da ricercare all’interno del file ajaxsbmt.js credo in questa porzione di codice
if (self.xmlHttpReq.readyState == 4) {
// Quando pronta, visualizzo la risposta del form
updatepage(self.xmlHttpReq.responseText,responsediv);
} else {
// In attesa della risposta del form visualizzo il msg di attesa
updatepage(responsemsg,responsediv);
}
ribadisco che il problema a me si presenta solo in chrome
ho fatto alcuni test e la funzioncina
updatepage(responsemsg,responsediv);
se posizionata nell’if
if (self.xmlHttpReq.readyState == 4)
stampa il messaggio di attesa quindi deve esserci qualche problema con chrome nella gestione di quell’else !
spero di essere stato chiaro
domandina … all’interno della stessa pagina ho uno script che mi richiama una pagina php che carica tutti i commenti in un apposito DIV
$(document).ready(function(){
$(“#ultimicommenti”).load(“commenti.php”);
});
c’è un modo per far si che una volta inviato il form ed inserito il commento venga richiamata nuovamente la pagina commenti.php ?
non riesco a scaricarlo…
Esattamente che problemi hai?
← Commenti precedenti