Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Mensaje iniciado por: tecasoft en 28 Octubre 2015, 02:23 AM

Título: pasar array de un formulario que se repite
Publicado por: tecasoft en 28 Octubre 2015, 02:23 AM
como puedo pasar el array de un formulario que repite document.form_partes.elements['cantidad[]'];

barcos.php
Código (javascript) [Seleccionar]

function visualizarpartes() {

var str=document.form_partes.elements['cantidad[]'];
for (i=0; i< str.length; i++) {



if(str[i].length==0)
{
document.getElementById("visualizar_partes").innerHTML="no hay datos";
return;
}

  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
      document.getElementById("visualizar_partes").innerHTML = xhttp.responseText;
    }
  }
  xhttp.open("GET", "ajax_visualizar_partes.php?cantidad="+str[i], true);
  xhttp.send();
}

}



ajax_visualizar_partes.php
Código (php) [Seleccionar]

foreach($cantidad as $numero){
echo $numero;
}


Título: Re: pasar array de un formulario que se repite
Publicado por: MinusFour en 28 Octubre 2015, 02:37 AM
Tu pregunta no tiene sentido. :huh: Creo que hay que pulir bastante esa destreza para escribir mensajes razonables.
Título: Re: pasar array de un formulario que se repite
Publicado por: tecasoft en 28 Octubre 2015, 03:00 AM
Código (javascript) [Seleccionar]


var str=document.form_partes.elements['cantidad[]'];
for (i=0; i< str.length; i++) {

alert(str[i].value);

}


esto lo que hace es sacar de un formulario la casilla name=cantidad[], es decir la casilla cantidad se repite varias veces. entonces lo que me muestra lo de arriba es 1300,1200,1100 del formulario form_partes de name="cantidad[]", yo lo que quiero es pasar esos 1300, 1200 y 1100 por GET, como lo harias tu? el alert me muestra esos 3 datos pero no consigo que vaya mas aya, tu que harias?
Título: Re: pasar array de un formulario que se repite
Publicado por: MinusFour en 28 Octubre 2015, 03:16 AM
Cita de: tecasoft en 28 Octubre 2015, 03:00 AM
Código (javascript) [Seleccionar]


var str=document.form_partes.elements['cantidad[]'];
for (i=0; i< str.length; i++) {

alert(str[i].value);

}


esto lo que hace es sacar de un formulario la casilla name=cantidad[], es decir la casilla cantidad se repite varias veces. entonces lo que me muestra lo de arriba es 1300,1200,1100 del formulario form_partes de name="cantidad[]", yo lo que quiero es pasar esos 1300, 1200 y 1100 por GET, como lo harias tu? el alert me muestra esos 3 datos pero no consigo que vaya mas aya, tu que harias?

Eso entonces no es un string. Es un arreglo, o un objeto parecido a un arreglo.

Código (javascript) [Seleccionar]

var arr = document.form_partes.elements['cantidad[]']
var qs = Array.prototype.reduce(arr, function (qs, cantidad) {
   if (cantidad.length > 0) {
       qs += (qs === '') ? ('cantidad[]=' + cantidad.value) : ('&cantidad[]=' + cantidad.value);
   }
   return qs;
}, '');

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
   if (xhttp.readyState == 4 && xhttp.status == 200) {
       document.getElementById("visualizar_partes").innerHTML = xhttp.responseText;
   }
}
xhttp.open("GET", "ajax_visualizar_partes.php?" + qs, true);
xhttp.send();


qs deberia ser:


cantidad[]=1300&cantidad[]=1200&cantidad[]=1100
Título: Re: pasar array de un formulario que se repite
Publicado por: tecasoft en 28 Octubre 2015, 03:24 AM
habria alguna forma de no hacerlo con protoype y que sea con jquery? ademas me arroja un error:

Código (javascript) [Seleccionar]


[object HTMLInputElement]Hey[object HTMLInputElement][object HTMLInputElement]


ademas y si fuera el name=cantidad[] infinito* ese codigo no serviria ya que le tienes que poner manualmente el codigo.

Muchas gracias
Título: Re: pasar array de un formulario que se repite
Publicado por: MinusFour en 28 Octubre 2015, 03:38 AM
Cita de: tecasoft en 28 Octubre 2015, 03:24 AM
habria alguna forma de no hacerlo con protoype y que sea con jquery? ademas me arroja un error:

Código (javascript) [Seleccionar]


[object HTMLInputElement]Hey[object HTMLInputElement][object HTMLInputElement]


Pues... habias puesto codigo en javascript sin jQuery, me imaginaba que no estabas utilizando jQuery (que por cierto actualize la respuesta... ahora deberia funcionar).

Con jQuery, no se si se pueda:

Código (javascript) [Seleccionar]

var qs = $.param($('input[name="cantidad[]"]').map(function (ind, elem) {
   return {
       name: 'cantidad[]',
       value: elem.value
   }
}).get());


El problema con los metodos de serialize y param es que escapan los strings con percent encoding. No estoy seguro si PHP recoja los nombres correctamente.

Cita de: tecasoft en 28 Octubre 2015, 03:24 AM
ademas y si fuera el name=cantidad[] infinito* ese codigo no serviria ya que le tienes que poner manualmente el codigo.

Muchas gracias

En ningún lugar has puesto esa validación? Yo solo use las validaciones que usaste en tu primer código. De todas formas, es bastante sencillo agregar otras validaciones....

Código (javascript) [Seleccionar]
var arr = document.form_partes.elements['cantidad[]']
var qs = Array.prototype.reduce(arr, function (qs, cantidad) {
   if (cantidad.length > 0 && typeof parseInt(cantidad, 10) === 'number') {
       qs += (qs === '') ? ('cantidad[]=' + cantidad.value) : ('&cantidad[]=' + cantidad.value);
   }
   return qs;
}, '');
Título: Re: pasar array de un formulario que se repite
Publicado por: tecasoft en 28 Octubre 2015, 03:55 AM
lo tengo asi ahora pero no me chuta y tengo jquery activado.

Código (javascript) [Seleccionar]

var qs = $.param($('input[name="cantidad[]"]').map(function (ind, elem) {
       return {
           name: 'cantidad[]',
           value: elem.value
       }
   }).get( "ajax_visualizar_partes.php", function( data ) {
 $( "#visualizar_partes" ).html( data );

})
);
Título: Re: pasar array de un formulario que se repite
Publicado por: MinusFour en 28 Octubre 2015, 15:19 PM
Porque el get que he puesto no es para hacer AJAX.

Código (javascript) [Seleccionar]

var qs = $.param($('input[name="cantidad[]"]').map(function (ind, elem) {
   return {
       name: 'cantidad[]',
       value: elem.value
   }
}).get());

$.get( "ajax_visualizar_partes.php?"+qs, function( data ) {
 $( "#visualizar_partes" ).html( data );
}