Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2007
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.636
Poder: 10
Emilio Va por buen camino
Cita:
Empezado por dec
No os veáis obligados a comentar ni a decir ni a dejar de decir.
Hombre Dec, creo yo que ya que te has tomado la molestia, precisamente estaría bien que fueses tú el que comentase el código, puede ser tal vez evidente pero tal vez para mucha gente no lo sea.
__________________
Saludos
Emilio
Responder Con Cita
  #2  
Antiguo 07-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Eso está hecho. Si no lo hize antes es porque pensé que era acaso mejor así, sin comentarios, pero, tienes razón, y además no vendrá mal. Lo comento y lo subo comentado y edito el mensaje y actualizo el archivo Zip de marras en unos momentos...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 09-01-2007
|NoName| |NoName| is offline
Miembro
 
Registrado: ene 2007
Posts: 31
Poder: 0
|NoName| Va por buen camino
Una consulta dec, como se hace para capturar con tu libreria los valores de uno o mas inputs utilizando el metodo POST?
Responder Con Cita
  #4  
Antiguo 09-01-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Buen trabajo dec.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #5  
Antiguo 10-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 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
  #6  
Antiguo 10-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por |NoName|
Una consulta dec, como se hace para capturar con tu libreria los valores de uno o mas inputs utilizando el metodo POST?
Pues Román puede que te haya dado ya una idea bastante completa de cómo lograrlo. En realidad lo que se pasa en el "query" son pares de claves/valor. En el ejemplo se utiliza sólo un par, pero, en la práctica pueden ser los que te sean precisos.

Respecto de la clase de marras... no sé. Al cabo se sale de madre. Si la intención era que no fuera menester utilizar muchos parámetros en los métodos "más completos", lo cierto es que no se consigue, puesto que al cabo hay que pasar hasta seis parámetros...

Lo cierto es que intenté limitar estos pasando a una sola función el objeto "request", y que fuera dicha función la que se encargara de completar la tarea, comprobando el "readyState" y el "status". Sin embago esto no funciona. No me pregunten porqué, pero, no funciona. Y el caso es que creo recordar haber intentado lo mismo hace tiempo... con el mismo nulo resultado.

No sé. Al cabo creo que lo suyo es tener más o menos claro cómo funciona el objeto "XmlHttpRequest", formar una clase básica para utilizarlo, y, a partir de ahí, ya saben, cada proyecto es un mundo...

En fin. Que creo que la clase es un éxito sólo relativo y quedan no pocos flecos por ahí que no convencen demasiado. Lo que propone Román es muy interesante, desde luego, y puede que en algunos casos fuera muy curioso hacer las cosas de ese modo: mandando todo el formulario en la petición HTTP y a partir de ahí obrar.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 10-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec
Lo cierto es que intenté limitar estos pasando a una sola función el objeto "request", y que fuera dicha función la que se encargara de completar la tarea, comprobando el "readyState" y el "status". Sin embago esto no funciona. No me pregunten porqué, pero, no funciona. Y el caso es que creo recordar haber intentado lo mismo hace tiempo... con el mismo nulo resultado.
Me gustaría que detallaras más a ver si podemos ver por donde está el problema. Lo comento porque javascript es todo un mundo muy extraño. Sin ir más lejos, usas en tu clase (creo que variable es más adecuado) una notación identificador:function que yo jamás había visto, y eso que no estoy en cero en js. El caso es que en la clase Ajax que hice alguna vez, el "evento" de finalización (yo no tenía el de progreso), en lugar de pasarlo como parámetro de una función, lo asignaba como "propiedad" de la clase misma y eso generó algunos problemas porque this no es lo mismo here and there, .

En cuanto a lo que mencionas de muchos parámetros pues de cualquier manera has de pasarle información. Una forma de hacerlo es con parámetros y otra con propiedades del objeto, y no estoy seguro cual pueda ser más práctica.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Librería para hacer peticiones HTTP para delphi 5 rlago Internet 3 06-11-2006 10:28:18
Ping en segundo plano toorbye Internet 5 19-10-2006 13:52:32
Programar en segundo plano Isako API de Windows 3 02-03-2005 14:31:20
Ayuda con Teclas en Segundo Plano Sundance Varios 12 29-08-2004 18:09:18
Ejecutar selects en segundo plano cartmanrules Firebird e Interbase 2 27-05-2004 19:08:56


La franja horaria es GMT +2. Ahora son las 05:52:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi