Inviare dati via POST #2

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?! 🙂

4 thoughts on “Inviare dati via POST #2”

  1. 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?

Comments are closed.