Función GetDataForm

27 febrero 2019

Para enviar vía AJAX el contenido de un formulario del cliente al servidor, se necesita crear una cadena de caracteres de pares «variable=valor» separados por el carácter ‘&’ (ampersand). Esa es una tarea muy de tediosa de realizar, especialmente cuando el formulario tiene un número grande de variables para enviar. La función ‘GetDataForm‘ simplifica esta tarea:

valores=GetDataForm(idForm);

Posteriormente, una llamada AJAX al servidor enviando los valores del formulario se realizaría así:

ajaxM.send(valores);

La función sería la siguiente:

var VAL_VERDADERO='1';
var VAL_FALSO='0';
function GetDataForm(f)
{
 if(!f)
  return "";

 var i,j,x;
 var cad="";
 var val;
 var radioNom="";

 for(i=0;i<f.length;i++)
 {
  x=f.elements[i];
  if(typeof(x.name)!="undefined" && x.name.length>0)
  {
   switch(x.type)
   {
    case "text": case "password": case "hidden": case "textarea":
     val=x.value.trim();
     break;

    case "select-one":
     if(x.options.length>0 && x.selectedIndex>=0 && x.selectedIndex<x.options.length)
      val=(x.options[x.selectedIndex].value) ?
          x.options[x.selectedIndex].value : x.options[x.selectedIndex].text;
     else
      val="__NO__VAL__";
     break;

    case "checkbox":
     val=(x.checked)?VAL_VERDADERO:VAL_FALSO;
     break;

    case "radio":
     val="";
     if(radioNom!=x.name)
     {
      radioNom=x.name;
      j=0;
      while(f.elements[radioNom][j] && val=="")
      {
       if(f.elements[radioNom][j].checked)
       val=f.elements[radioNom][j].value;
       j++;
      }
     }
     break;

    default: //case "button": case "reset": case "submit": case "file":
     val="__NO__VAL__";
     break;
   }

   if(val!="__NO__VAL__")
   {
    if(val!="")
    {
     if(cad!="")
      cad+="&";
     cad+=x.name+"="+encodeURIComponent(val);
    }
   }
  }
 }
 return cad;
}