2010-11-21 12 views
11

Come preparare questo array per $.ajax inviare? Qui le immagini ritornano ["val1","val2"] ma dopo io uso $.param(images) torno undefined=undefined&undefined=undefinedSerializzare una matrice in 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; 

In generale l'idea è di controllare le immagini da eliminare a pagina poi su clic del pulsante ciclo attraverso tutte le immagini selezionate e serializzare array per presentare oltre Ajax per script php.

risposta

23

Non si passa una matrice in formato corretto a $.param. Dalla jQuery.param docs:

Se l'oggetto passato è in una matrice, deve essere un array di oggetti nel formato restituito da .serializeArray().

L'array deve essere una matrice di oggetti costituiti da coppie nome/valore. Si vede undefined=undefined&undefined=undefined perché "val1".name, "val1".value, "val2".name e "val2".value, sono tutti non definiti. Esso dovrebbe essere simile a questo:

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

in modo da poter costruire la serie come questo (supponendo che il checkbox hanno un attributo 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; 
}); 

Anche lisciante, però, è quello di utilizzare .map() (perché programmazione funzionale è roba buona):

$('#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

Questa materia è stato difficile per me capire, ma con la tua risposta e alcune indagini sono riuscito a fare quello che volevo, GRAZIE =) – Metafaniel

7

Vedere la docs for $.param:

Se l'oggetto passato è in un array, deve essere un array di oggetti nel formato restituito da .serializeArray()

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

Ciò significa che è necessario generare l'array nello stesso modo :

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

La tua risposta è stata utile anche per me, grazie mille =) – Metafaniel

0

trovo una grande funzione per farlo da un'altra domanda https://stackoverflow.com/a/31751351/4110122

Questo array di ritorno funzione con coppie di valori chiave

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

Per utilizzare questo basta chiamare:

var Form_Data = $('form').serializeObject(); 
console.log(Form_Data); 
Problemi correlati