Array Javascript su php con jQuery ajax

Possibile duplicato:
Passare la matrice JavaScript a PHP tramite JQuery $ .ajax

Sto cercando di passare alcune variabili raccolte da n input generati dynamicmente a php con ajax.

 

Questo è l’input generato dynamicmente (potrebbe essere 1 o 100). Ora, se li invio senza ajax mi dà una matrice in PHP semplicemente facendo

 $services = $_POST['service']; 

Ma cosa succede se voglio farlo con ajax senza aggiornare la pagina?

 var action = $("form_act").attr('action'); var form_data = { service: $("#service").val(), ajax_request: 1 }; $.ajax({ type: "POST", url: action, data: form_data, dataType: "json", success: function (response) { if (response.error == 'none') $("#form_content").slideToggle('slow', function () { $('#form_content').load('includes/db_setup_form.php'); $("#form_content").delay(500).slideToggle('slow'); }); else { $("#ajax_response").html("

" + response.msg + "

"); } } });

Invia solo la prima variabile di servizio e non una matrice completa con le altre (se ci sono) variabili. Eventuali suggerimenti?

problema che il selettore (‘#services’) prende solo il primo valore di input. Dovresti rimuovere id e serializzare semplicemente il modulo come sotto.

Se tutto ciò che devi passare è tutti i valori del modulo che puoi utilizzare

 data: $('form#my-form').serialize() // this code puts all of the inputs into passable and readable for PHP, way. 

E poi in $ _POST [‘servizio’] sarà una serie di valori di input.

Per esempio:

 

Nel tuo JS:

 $.post($('form#services').attr('action'), $('form#services').serialize(), function(response) {}); 

E poi in save.php puoi ottenere un array in $ _POST:

 var_dump($_POST['service']); 

Spero che sia esattamente ciò di cui hai bisogno.

È necessario selezionare gli input per attributo name perché non è valido avere più di un elemento con lo stesso ID in un documento HTML. Il tuo selettore jQuery sa che sta cercando quello che dovrebbe essere un elemento unico in modo che si fermi dopo aver trovato il primo. Anche la funzione .val() trova solo il valore del primo elemento nel set di elementi selezionati.

Ecco cosa cambierei:

 var form_data = { service: $("#service").val(), ajax_request: 1 }; 

A:

 var form_data = { service: $('[name="service[]"]').serialize(), ajax_request: 1 }; 

Ecco una demo: http://jsfiddle.net/sS7YP/

Ecco la documentazione per .serialize() : http://api.jquery.com/serialize

Una soluzione che crea una matrice pulita dei valori degli input del tuo service[] , usando jQuery.map() .

 var $form = $('#form_id'), $inputs = $form.find('input[name^=service]'); // Do not select by ID $form.on('submit', function(event) { // Build an array only containing the services values var values = []; $.map($inputs, function(e) { values.push(e.value); }); event.preventDefault(); }); 

http://jsfiddle.net/eTU2y/1/