Ver Mensaje Individual
  #25 (permalink)  
Antiguo 18/09/2006, 07:15
Avatar de tunait
tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 2 meses
Puntos: 381
El otro día cuando instalé el tinglado de esa clase saqué algunas conclusiones (ninguna buena) que por falta de tiempo no he podido comentar hasta ahora. Calisco, me has ahorrado teclear parte del asunto veo que también has visto lo que hay.

Pero el asunto va más allá, según mi opinión. Esta clase se define como upload con ajax cuando no usa ajax para realizar el upload y además el poco uso que hace de ajax es totalmente inutil y sólo confunde pues no trae ninguna información útil ni real.

En esta línea de uploader.js ...
Código:
function traceUpload(uploadDir) {
         
   http.onreadystatechange = handleResponse;

   http.open("GET", 'imageupload.php?uploadDir='+uploadDir+'&uploader='+uploader); 
   http.send(null);  
}
...está enviando unos párametros para nada. Si se quitan el script funciona exactamente igual

Código:
function traceUpload(uploadDir) {
         
   http.onreadystatechange = handleResponse;

   http.open("GET", 'imageupload.php'); 
   http.send(null);  
}
porque el archivo 'imageupload.php' sólo se encarga de recoger variables enviadas por el método POST y no por GET. En el caso de no encontrar algo concreto por POST devuelve siempre un ...
Código PHP:
else
        echo 
"Archivo subido."
Así que al enviar el objeto xmlHttpRequest esperando una respuesta recibe siempre la misma puesto que no se ha enviado nada por POST. En realidad el envío por POST se ha hecho al submitir el form a través del iframe pero es una petición distinta a la que hace ajax.

Así que aunque el archivo no se haya subido por algún error el ajax no se entera y sigue recibiendo de cualquier forma el mensaje "Archivo subido" (información errónea en realidad)

Cuando se envía el form y ocurre un error (el directorio no existe, por ejemplo) nos salta una alert() pero ese alert no es manejado por ajax, si no por el propio archivo imageupload.php desde el iframe (es el documento del iframe quien lanza el aviso). Sin embargo la parte manejada por ajax (la que no controla nada en realidad) nos escribe en el documento "Archivo subido" y nos quita el campo y lo da por bueno

Así el uso de onreadystatechange sólo sirve para lanzar una función que escribe lo que devuelve imageupload.php que es siempre el mismo mensaje cuando se debería, en todo caso, lanzar esa función desde el iframe que es el que de verdad está recogiendo el mensaje fijal (si se subió o no)

Así que en este uploader el uso de ajax es inutil e innecesario.

Analizo además otros detalles sin sentido:

¿por qué quitar el campo de archivo tras subir el archivo?
¿por qué la clase crea un form para cada campo y un iframe distinto para cada form + campo? se puede manejar todo desde un único iframe y no t ener que hacer tanto malabarismo con idés de formulario e idés de iframes.

Sería más lógico que se envíen los archivos a la vez con un único submit y que sea el usuario quien decida el momento de ser enviados (por ejemplo si seleccionó mal el archivo que quería no le da ocasión a rectificar).

En fin, que son montones de líneas que no sirven que crean un sistema poco usable y que engaña al "venderse" como un sistema ajax. Se puede hacer lo mismo sin necesidad de tanto lío.