pasar array de un formulario que se repite

Iniciado por tecasoft, 28 Octubre 2015, 02:23 AM

0 Miembros y 1 Visitante están viendo este tema.

tecasoft

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;
}


http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

MinusFour

Tu pregunta no tiene sentido. :huh: Creo que hay que pulir bastante esa destreza para escribir mensajes razonables.

tecasoft

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?
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

MinusFour

#3
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

tecasoft

#4
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
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

MinusFour

#5
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;
}, '');

tecasoft

#6
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 );

})
);
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

MinusFour

#7
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 );
}