2010-11-21 31 views
11

Jak przygotować tę tablicę do przesłania $.ajax? Oto zdjęcia powrócić ["val1","val2"] ale po użyciu $.param(images) ja wrócę undefined=undefined&undefined=undefinedSerializowanie tablicy w 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; 

Generalnie idea jest sprawdzenie obrazów usunąć na stronie, a następnie na przycisk click pętli koryta sprawdzone wszystkie zdjęcia i szeregować tablicę dla przedstawienia przez AJAX skrypt php.

Odpowiedz

23

Nie przekazujesz tablicy w odpowiednim formacie do $.param. Z jQuery.param docs:

Jeśli obiekt jest przekazywana w tablicy, to musi być tablicą obiektów w formacie zwróconym przez .serializeArray().

Tablica powinna być tablicą obiektów składającą się z par nazwa/wartość. Zobaczysz, że undefined=undefined&undefined=undefined ponieważ "val1".name, ,i , wszystkie są niezdefiniowane. Powinno to wyglądać mniej więcej tak:

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

Więc można skonstruować tablicę tak (zakładając wasze pola wyboru mają atrybut 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; 
}); 

Nawet płaszcz, choć jest użycie .map() (bo programowanie funkcjonalny jest dobre rzeczy):

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

Ta sprawa była dla mnie trudne do zrozumienia, ale z Twojej odpowiedzi, a niektóre badania udało mi się zrobić co chciałem, DZIĘKUJĘ =) – Metafaniel

7

Zobacz docs for $.param:

Jeśli obiekt przeszedł w tablicy, to musi być tablicą obiektów w formacie zwróconym przez .serializeArray()

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

Oznacza to, że trzeba wygenerować tablicę w taki sam sposób :

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

Twoja odpowiedź była dla mnie pomocna, bardzo dziękuję =) – Metafaniel

0

znajdę wielką funkcję to zrobić z innym pytaniem https://stackoverflow.com/a/31751351/4110122

Ta funkcja return array z par wartości kluczowych

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

W tym celu użyj po prostu zadzwoń:

var Form_Data = $('form').serializeObject(); 
console.log(Form_Data); 
Powiązane problemy