Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] alguna forma de enviar datos uno por uno en ves de todos a la vez?

Estas en el tema de alguna forma de enviar datos uno por uno en ves de todos a la vez? en el foro de Javascript en Foros del Web. Hola Chicos de nuevo yo ultimamnete he estado muy activo en javascript pero pues bueno toy creando algo bueno que donde lo conqcrete lo publicare ...
  #1 (permalink)  
Antiguo 18/07/2013, 21:25
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
alguna forma de enviar datos uno por uno en ves de todos a la vez?

Hola Chicos de nuevo yo ultimamnete he estado muy activo en javascript pero pues bueno toy creando algo bueno que donde lo conqcrete lo publicare en algun video o github.

bueno mi pregunta es la siguiente tengo un for que pense que iria haciendo envio por envio en orden secuencial. pues bueno no me funciono creo que por que es javascript y no funciona como la mayoria de lenguajes de programacion. Entonces si alguno de uds sabra como validar que por ejemplo se envio y el servidor recivio completamente la peticion para luego enviar el siguiente archivo le agradeceria.

Aqui tengo una funcion pero no me funciona :/
Código Javascript:
Ver original
  1. function envio3(datos){
  2.     var oReq=new XMLHttpRequest();
  3.     oReq.upload.addEventListener('progress', prigress, false);
  4.     oReq.open('POST', '../Uploads/subirfotos.php', true);
  5.     oReq.onreadystatechange = function(){ if(this.readyState===4){
  6.         return true;
  7.     }else{
  8.         return false;
  9.     }
  10.     }
  11.     oReq.send(datos);
  12. }

pero no hace nada. Entoces si el for tiene 20 ciclos envia los 20 y eso pues no me sirve me gustaria que fuera uno y cuando el readystate==4 envie el otro y asi sucesivamente.

Gracias a todos :D
  #2 (permalink)  
Antiguo 19/07/2013, 01:23
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

Hola:

Creo que lo que necesitas es implementar una cola. En otro tema puse un pequeño código: "Problema con Jquery AJAX"... como verás, mi respuesta no usa librerías.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Última edición por caricatos; 19/07/2013 a las 01:24 Razón: completar texto
  #3 (permalink)  
Antiguo 19/07/2013, 17:15
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

olle lo siento si soy todabia inexperto y algunas cosas de tu codigo no las entendi, y si no entiendo no se que modificar o como funciona.

Código Javascript:
Ver original
  1. Ajaxs = [{"url": "ventana.php", "ventana": "1"}, {"url": "contenedor.php", "ventana": "2"}];
  2.  
  3. function continuar()    {
  4.     if (Ajaxs.length > 0)   {
  5.         proceso = Ajaxs.shift();
  6.         cargaXML(proceso.url, proceso.ventana);
  7.     }
  8. }

ajaxs es un array que en sus campos carga unas peticiones post? no lo pude entender bn lo siento pero bueno aca esta mi codigo

Código Javascript:
Ver original
  1. function subirFotos(input, option){
  2.     if(window.FormData){
  3.         formdata = new FormData();
  4.     }
  5.     var i = 0, len = input.files.length, img, reader, file; //  hago un foreach por cada uno de los elementos que se han cargado en un input type file
  6.     for( ; i < len; i++){
  7.         envios=len;
  8.         file = input.files[i];
  9.         if(!!file.type.match(/image.*/)){
  10.             if(formdata)
  11.                 formdata.append('fl_addbook', file);
  12.                 envio3(formdata);//  esta es la funcion que hace los envios POST  pero pense que haciendo una parada no se algo lo haria pero nooo  :/  los lanza todos de
  13.                                                 // una, auqnue me di de cuenta que tiene un limite de 4 creo osea lanza cuatro y si ya termino de enviar uno se carga el siguiente pero si el limite de envio es de 4
  14.                 if(i===(len-1)){
  15.                     if(option===1){
  16.                         ajax('../Uploads/subirfotos.php', {rd_permiss:$('#book > article > form > article > article > input').val()});
  17.                         $('#abracadabra')[0].reset();
  18.                        
  19.                     }else if(option===2){
  20.                         $('#addphotoshop > article > article > article > form')[0].reset();
  21.                     }
  22.                 }
  23.         }
  24.     }
  25. }

la funcion envio3 es la de arriba y esta tal cual entonces pues talves me puedieras ayudar que la verdad no pude entender tu codigo y menos como implementarlo
  #4 (permalink)  
Antiguo 20/07/2013, 20:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

Hola:

El código no tiene mucha explicación, y es sin librerías... si insistes en usarlas tendremos que mover el tema.

Básicamente es tener un array global con los datos de cada petición; quitar de ese array el primer elemento y procesarlo... con la respuesta ajax quitar del array el siguiente elemento.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 22/07/2013, 11:55
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

cuales librerias? no entiendo? luego no estoy usando javascript puro? olle caricatos no te molestes por las preguntas por que para eso se hizo el foro para preguntar!.

Ya entendi bien lo del array gracias a tu explicacion (que si era necesaria) pero entonces podrias poner el codigo de la funcion cargaXML() que en tu codigo llamas. Por no se que librerias estoy usando, como te digo llevo poco en esto de javascript! solo explicame que despues yo explicare a otros :D
  #6 (permalink)  
Antiguo 22/07/2013, 19:37
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

Hola:

Cita:
Iniciado por sonickseven Ver Mensaje
cuales librerias? no entiendo? luego no estoy usando javascript puro? olle caricatos no te molestes por las preguntas por que para eso se hizo el foro para preguntar!.

Ya entendi bien lo del array gracias a tu explicacion (que si era necesaria) pero entonces podrias poner el codigo de la funcion cargaXML() que en tu codigo llamas. Por no se que librerias estoy usando, como te digo llevo poco en esto de javascript! solo explicame que despues yo explicare a otros :D
javascript no tiene de forma nativa una función $() (ni siquiera como conversor de divisas)... así que si no usas librerías, te falta mostrar ese código... pero posiblemente estés usando jquery...

Las preguntas no me molestan, pero si los datos los debemos pedir constantemente es algo cansino. si me molestasen las preguntas, no respondería

La función cargaXML está en el enlace que puse al principio, y no se trata de código mío... evidentemente no te has tomado el tiempo necesario para enterarte del hilo referenciado.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 22/07/2013, 22:12
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

Cita:
Iniciado por caricatos Ver Mensaje

La función cargaXML está en el enlace que puse al principio, y no se trata de código mío... evidentemente no te has tomado el tiempo necesario para enterarte del hilo referenciado.

Saludos
si la vi 4 minutos despues de haber escrito donde estaba ella. Ahora el problema es este yo hago peticiones ajax con un for. y no se como llenar el array Ajaxs con los datos del formdata que tengo ahi en mi codigo:
Código Javascript:
Ver original
  1. formdata.append('fl_addbook', file);
no tengo ni idea ya que como es con archivos en ves de datos pequeños como letras o digitos. Te agradeceria si me pudieras ayudar
  #8 (permalink)  
Antiguo 23/07/2013, 11:55
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

listos chicos ya lo hize como tu querias pero sigue el error de que los envia todos al mismo tiempo :(
mira el codigo:
Código Javascript:
Ver original
  1. Ajaxs = new Array();
  2. function subirFotos(input, option){
  3.     if(window.FormData){
  4.         formdata = new FormData();
  5.     }
  6.     var i = 0, len = input.files.length, img, reader, file;
  7.  
  8.     for( ; i < len; i++){
  9.         envios=len;
  10.         file = input.files[i];
  11.         if(!!file.type.match(/image.*/)){
  12.             if(formdata)
  13.                 formdata.append('fl_addbook', file);
  14.                 Ajaxs.push({"datas":formdata});
  15.                 continuar();
  16.                 if(i===(len-1)){
  17.                     if(option===1){
  18.                         ajax('../Uploads/subirfotos.php', {rd_permiss:$('#book > article > form > article > article > input').val()});
  19.                         $('#abracadabra')[0].reset();
  20.                     }else if(option===2){
  21.                         $('#addphotoshop > article > article > article > form')[0].reset();
  22.                     }
  23.                 }
  24.         }
  25.     }
  26. }
  27.  
  28. function continuar(){  // tu funcion
  29.     if (Ajaxs.length > 0)   {
  30.         proceso = Ajaxs.shift();
  31.         envio4(proceso.datas);
  32.     }
  33. }
  34.  
  35. function prigress(prog){  // la que me muestra  el progreso en una progressBar
  36.     var p=$('#progresito > div');
  37.     p.html(prog+"%");
  38.     p.css({'width':prog+"%"});
  39. }
  40.  
  41. var oReq;
  42. function envio4(datos){ // funcion que envia datos
  43.     oReq=new XMLHttpRequest(), all=new Array();
  44.     oReq.upload.addEventListener('progress',function(e){
  45.         var prog=parseInt(Math.round((e.loaded / e.total)*100)); //progreso del envio del archivo
  46.         prigress(prog);
  47.        
  48.     }, false);
  49.     oReq.open('POST', '../Uploads/subirfotos.php', true);
  50.     oReq.onreadystatechange = function(){ if(this.readyState===4){
  51.         console.log(porcentajes(1)); // contador de cuantos archivos se han subido correctamente
  52.         continuar();
  53.     }
  54.     }
  55.     oReq.send(datos);
  56. }// el parametro es el valor al que se inicializa la variable dentro del closure ;
  57.  
  58. var porcentajes = (function(init){ // esta funcion anonima crea un closure ;
  59. return function(a){
  60. init += a;
  61. return init;
  62. };
  63. })(0); // el parametro es el valor al que se inicializa la variable dentro del closure ;

pues la progressBar por ejemplo esta en 80% y depronto se baja para 20% que es del otro envio investigare pero casi corono
caricatos si vez algo que arreglar porfa ayudame

ammm y algo más yo no me centro solo en javascript o solo jquery los utilizo los dos para hacer el codigo mas facil. estavez utilize javascript para saber el porcentaje del envio

Última edición por sonickseven; 23/07/2013 a las 12:01
  #9 (permalink)  
Antiguo 23/07/2013, 12:38
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: alguna forma de enviar datos uno por uno en ves de todos a la vez?

siiiiii lo solucione!!!!! ja aj aja era solo sacar la funcion continuar del for :D y listos ja aj aja que bn no me gano!!!
Código Javascript:
Ver original
  1. function subirFotos(input, option){
  2.     if(window.FormData){
  3.         formdata = new FormData();
  4.     }
  5.     var i = 0, len = input.files.length, img, reader, file;
  6.     for( ; i < len; i++){
  7.         envios=len;
  8.         file = input.files[i];
  9.         if(!!file.type.match(/image.*/)){
  10.             if(formdata)
  11.                 formdata.append('fl_addbook', file);
  12.                 Ajaxs.push({"datas":formdata});
  13.                 if(i===(len-1)){
  14.                     if(option===1){
  15.                         ajax('../Uploads/subirfotos.php', {rd_permiss:$('#book > article > form > article > article > input').val()});
  16.                         $('#abracadabra')[0].reset();
  17.                     }else if(option===2){
  18.                         $('#addphotoshop > article > article > article > form')[0].reset();
  19.                     }
  20.                 }
  21.         }
  22.     }
  23.     continuar();
  24. }

lsitos gracias amigo caricatos enserio estaba mas estresado por que nada que podia hacerlo funcionar como yo queria pero ahora si, y lo mejor es que aprendi muchas cosas mas como para hacerlo mejor :D gracias amigo!!

Etiquetas: alguna, forma, funcion, php, ves
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:07.