2010-11-21 19 views
11

¿Cómo preparar esta matriz para $.ajax enviar? Aquí imágenes vuelven ["val1","val2"] pero después yo uso $.param(images) que vuelva undefined=undefined&undefined=undefined¿Serializar una matriz en Jquery?

$('#rem_images').click(function(){ 
     var images = new Array(); 
     $('.images_set_image input:checked').each(function(i){ 
      images[i] = $(this).val(); 
     }); 
     alert($.param(images)); 
     return false; 

En general la idea es comprobar las imágenes que desee borrar en la página de entonces clic de botón a través del bucle todas las imágenes comprueban y serializar matriz para presentar más de Ajax a script php.

Respuesta

23

No está pasando una matriz en formato adecuado al $.param. Desde el jQuery.param docs:

Si el objeto pasado se encuentra en una matriz, debe ser una matriz de objetos en el formato devuelto por .serializeArray().

La matriz debe ser una matriz de objetos que consta de pares de nombre/valor. Ver undefined=undefined&undefined=undefined porque "val1".name, "val1".value, "val2".name y "val2".value, no están definidos. Debe ser algo como esto:

[{name: 'name1', value: 'val1'}, {name: 'name2', value: 'val2'}] 

Así se puede construir la matriz así (asumiendo sus casillas tienen un atributo name):

$('#rem_images').click(function(){ 
    var images = []; 
    $('.images_set_image input:checked').each(function(){ 
     var $this = $(this); 
     images.push({name: $this.attr('name'), value: $this.val()}); 
    }); 
    alert($.param(images)); 
    return false; 
}); 

Incluso más pulido, sin embargo, es el uso de .map() (porque la programación funcional es bueno):

$('#rem_images').click(function(){ 
    var images = $('.images_set_image input:checked').map(function(){ 
     var $this = $(this); 
     return {name: $this.attr('name'), value: $this.val()}; 
    }).get(); 
    alert($.param(images)); 
    return false; 
}); 
+1

Este asunto fue difícil para mí entender, pero con su respuesta y un poco de investigación he conseguido hacer lo que quería, GRACIAS =) – Metafaniel

7

Ver la docs for $.param:

Si el objeto pasado se encuentra en una matriz, debe ser una matriz de objetos en el formato devuelto por .serializeArray()

[{name:"first",value:"Rick"}, 
{name:"last",value:"Astley"}, 
{name:"job",value:"Rock Star"}] 

Eso significa que necesita para generar la matriz de la misma manera :

$('.images_set_image input:checked').each(function(i){ 
    images.push({ name: i, value: $(this).val() }); 
}); 
+0

Tu respuesta fue útil también para mí, muchas gracias =) – Metafaniel

0

encuentro un gran función hacerlo desde otra pregunta https://stackoverflow.com/a/31751351/4110122

Esta matriz retorno de la función con pares de valores clave

$.fn.serializeObject = function() { 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name] !== undefined) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      }  
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

Para utilizar esta solo llame:

var Form_Data = $('form').serializeObject(); 
console.log(Form_Data); 
Cuestiones relacionadas