Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/07/2013, 16:38
Avatar de sonickseven
sonickseven
 
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
enviar ajax cada por cada archivo en un solo input (html5 input multuple)

Hola chicos hoy voy a hacer una pregunta que es nueva para la mayoria y es sobre la forma de enviar archivos con javascript con el objeto FormData.

Bueno mi pregunta es la siguiente:

yo hice un foreach en javascript que lo que hace es recorrer por cada uno de los archivos que el usuario a insertado en un input file multiple.
por cada uno de los archivos envie un array los inserto en un FormData y los envio. Pues el problema es que no se como limpiar el formdata ya que cada vez que se recorre el archivo esta variable guarda el siguiente pero tambien el aterior y cada vez va creciendo y asi no me sirve.

codigo:

Código Javascript:
Ver original
  1. if(window.FormData){ //valida si el explorador puede trabajar con el Formdata
  2.         formdata = new FormData();
  3.         //document.getElementById('btnSubmit').style.display = 'none';
  4.     }
  5.  
  6. if(button.addEventListener){
  7.         button.addEventListener('click', function(evt){ // escucha cuando le da click a un boton
  8.             var i = 0, len = input.files.length, img, reader, file; // las variables
  9.            
  10.             document.getElementById('response').innerHTML = 'Subiendo...';
  11.            
  12.             //Si hay varias imágenes, las obtenemos una a una
  13.             for( ; i < len; i++){ //  hago un foreach por cada archivo que tenga el input dentro acordemos que es HTML5
  14.                 file = input.files[i];
  15.                 //console.log(file);
  16.                 //Una pequeña validación para subir imágenes
  17.                 if(!!file.type.match(/image.*/)){
  18.                     //Si el navegador soporta el objeto FileReader
  19.                     /*if(window.FileReader){
  20.                         reader = new FileReader();
  21.                         //Llamamos a este evento cuando la lectura del archivo es completa
  22.                         //Después agregamos la imagen en una lista
  23.                         reader.onloadend = function(e){
  24.                             mostrarImagenSubida(e.target.result); // funcion que muestra la imagen antes de subirla al servidor
  25.                         };
  26. //                        //Comienza a leer el archivo
  27. //                        //Cuando termina el evento onloadend es llamado
  28.                         reader.readAsDataURL(file);
  29.                     }*/
  30.                    
  31. //                    Si existe una instancia de FormData
  32.                     if(formdata)
  33.                         //Usamos el método append, cuyos parámetros son:
  34.                             //name : El nombre del campo
  35.                             //value: El valor del campo (puede ser de tipo Blob, File e incluso string)
  36.                         formdata.append('images[]', file); // aqui es donde le asigno al formdata los archivos
  37.                         //console.log(file);
  38.                         //formdata='cod='+i+'&'+formdata;
  39.                         var hola=envio(formdata);
  40.                         if(hola){
  41.                             console.log('ok'); // valido si envio limpio el formdata
  42.                         }else{
  43.                             console.log('error'); // no envio no limpia
  44.                         }
  45.                 }
  46.             }          
  47.         });
  48.     }
  49. }());
  50.  
  51. function envio(form){ // funcion que envia datos pero pues aqui no creo que importe
  52.     var reto;
  53.      if(form){
  54.         $.ajax({
  55.            url : 'upload.php',
  56.            type : 'POST',
  57.            data : form,
  58.            processData : false,
  59.            contentType : false,
  60.            success : function(res){
  61.                document.getElementById('response').innerHTML = res;
  62.                reto=true;
  63.            }
  64.         });
  65.     }
  66.     reto=false;
  67. }

tengo un archivo php que lee los archivos y puse un echo que me muestra los nombre de los archivos y me sale asi

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

ciclo 1:

jaja.jpg

ciclo2:

jaja.jpg
mañana.png

ciclo 3:

jaja.jpg
mañana.png
forever.jpg

ciclo 4:

jaja-jpg
mañana.png
forever.jpg
hello.jpg


si se dan de cuenta se envia si la cntidad de archivco que hay dentro del input pero lo que se envia cada vez se incrementa y pues asi no me sirve por que sino cada vez se pone mas pesado el envio y se malgasta recursos entonces nooo

la cosa es como hago para limpiar el formdata y como hago la funcion que valida si se envio el dato en este caso el archivo por que no se todabia como hacer?

gracias de antemano por la atencion chicos :D

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