Solo un piccolo improve della funzione JavaScript che prepara i dati per l’invio via AJAX degli elementi compresi in un form.
Nella funzione PreparaDati() scritta nell’articolo linkato ci sono non poche limitazioni. Vediamole:
function PreparaDati(){
stringa = "";
var form = document.forms[0];
var numeroElementi = form.elements.length;
for(var i = 0; i < numeroElementi; i++){
if(i < numeroElementi-1){
stringa += form.elements[i].name+"="+encodeURIComponent(form.elements[i].value)+"&";
}else{
stringa += form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
}
}
}
La variabile form manda in detect la prima form trovata nella pagina processata. Tale funzione non è utilizzabile per pagine con più form.
Altro limite è il fatto di non poter scegliere quali dati inviare. Nel momento in cui si avvia la funzione, tutti gli elementi vengono inviati e compresi nella variabile stringa.
Adesso riscriveremo la funzione in modo tale che si possa scegliere quale form processare e quali dati inviare, senza toglierci la possibilità di inviare tutti i dati in default.
var ele = new Array();
function PreparaDati(nome,ele){
stringa = "";
var form = document.forms[nome];
if(ele){
var numeroElementi = ele.length;
for(var i = 0; i < numeroElementi; i++){
if(i < numeroElementi-1){
stringa += ele[i]+"="+encodeURIComponent(form.elements[ele[i]].value)+"&";
}else{
stringa += ele[i]+"="+encodeURIComponent(form.elements[ele[i]].value);
}
}
}else{
var numeroElementi = form.elements.length;
for(var i = 0; i < numeroElementi; i++){
if(i < numeroElementi-1){
stringa += form.elements[i].name+"="+encodeURIComponent(form.elements[i].value)+"&";
}else{
stringa += form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
}
}
}
}
Come potete vedere ora la funzione è parametrata. La variabile "nome" indica l’attributo name della form di cui si vuole preparare i dati per l’invio. Il parametro è obbligatorio.
La variabile "ele" è un array contenente gli elementi del form da inviare. Il parametro può essere false.
Se la nostra form ha attributo name = "myForm" e vogliamo inviare tutti gli elementi di questa, ci basterà scrivere:
PreparaDati(‘myForm’,false);
Se invece vogliamo inviare i campi "nome", "cognome", evitando di inviare il "telefono", scriveremo:
PreparaDati(‘myForm’, Array(‘nome’,’cognome’));
Facile, no?! 🙂
Grazie delle dritte!
Pregu 🙂
Ciao davidonzo,
ho un piccolo grande problema con lo script per l'invio dei dati con metodo post.
Se utilizzo lo script in ajax, non mi preleva i dati da un form per la registrazione (valore di radio button, input text, etc..); se la funzione non va, quindi mi apre una nuova pagina o viene eseguita male, i dati li preleva correttamente e li inserisce nel database.
Sapresti consigliarmi o aiutarmi nella risoluzione del problema?
tutto o.k.