Ver Mensaje Individual
  #6  
Antiguo 10-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Veo muy bien la clase. En particular me gustan los "eventos" para el progreso y el final de la operación. Si no te parece mal, creo que puedo complementar tu clase con mi función parseForm que toma como parámetro un formulario HTML y devuelve el query que requiere tu método HttpRequest (o casi). Hace tiempo que no lo reviso y me parece que faltan cosas, pero ahí está la idea.

Primero, tenemos la clase HttpParams que básicamente es una lista de parámetros y valores:

Código PHP:
/**************************************************************************

  Clase HttpParams

  Almacena pares [key, value] para ser enviados en una petición HTTP

***************************************************************************/

function HttpParams()
{
  
this.items = new Array();
}

// Agrega un par a la lista
//
HttpParams.prototype.add = function(keyvalue)
{
  
this.items[this.items.length] = [keyvalue];
}

// Construye la cadena a ser enviada
//
HttpParams.prototype.getQueryString = function()
{
  var 
result '';

  for (var 
0this.items.lengthi++)
  {
    var 
item this.items[i];

    if (
result)
    {
      
result += '&';
    }

    
result += item[0] + '=' item[1];
  }

  return 
encodeURI(result);

El método getQuery es el que regresa la cadena ya lista para ser enviada por Ajax.

La función parseForm:

Código PHP:
/**************************************************************************

  Función parseForm
  
  Extrae la información de un formulario y la coloca en un objeto HttpParams

**************************************************************************/

function parseForm(form)
{
  var 
elements form.elements;
  var 
params = new HttpParams();
  var 
element;

  for (var 
0elements.lengthi++)
  {
    
element elements.item(i);

    if (!
element.name)
    {
      continue;
    }

    switch (
element.type.toLowerCase())
    {
      case 
'text': case 'password': case 'hidden': case 'textarea': case 'button':
        
params.add(element.nameelement.value);
        break;

      case 
'select-one':
        if (
element.value)
        {
          
params.add(element.nameelement.value);
        }
        break;

      case 
'select-multiple':
        
options element.options;

        for (
0options.lengthj++)
        {
          
option options.item(j);

          if (
option.selected)
          {
            
params.add(element.nameoption.value);
          }
        }
        break;

      case 
'radio': case 'checkbox':
        if (
element.checked)
        {
          
params.add(element.nameelement.value);
        }
        break;
    }
  }

  return 
params;

Un ejemplo de uso está aquí, en donde los datos del formulario a la izquierda se envían vía la clase de dec. El script php que procesa los resultados, simplemente muestra los valores.

// Saludos
Responder Con Cita