Invia più dati della casella di controllo a PHP tramite jQuery ajax ()

Voglio inviare un modulo POST che contenga un campo textarea e un campo (i) di input (type = “checkbox” con un numero arbitrario / variabile di checkbox) sul mio sito web tramite jQuery’s .ajax (). PHP riceve i dati textarea e la risposta ajax viene visualizzata correttamente all’utente. Tuttavia, sembra che PHP non stia ricevendo i dati della casella di controllo (è stato controllato o meno). Come posso farlo funzionare? Ecco il codice che ho:

L’HTML:

...(maybe some more checkboxes - dynamically generated as necessary)

Il jQuery:

 function submitForm() { $(document).ready(function() { $("form#myForm").submit(function() { var myCheckboxes = new Array(); $("input:checked").each(function() { myCheckboxes.push($(this).val()); }); $.ajax({ type: "POST", url: "myurl.php", dataType: 'html', data: { myField:$("textarea[name=myField]").val(), myCheckboxes:myCheckboxes }, success: function(data){ $('#myResponse').html(data) } }); return false; }); }); 

Ora, il PHP

 $myField = htmlspecialchars( $_POST['myField'] ) ); if( isset( $_POST['myCheckboxes'] ) ) { for ( $i=0; $i < count( $_POST['myCheckboxes'] ); $i++ ) { // do some stuff, save to database, etc. } } // create the response $response = 'an HTML response'; $response = stripslashes($response); echo($response); 

Tutto funziona alla grande: quando il modulo viene inviato, un nuovo record viene archiviato nel mio database, la risposta viene restituita alla pagina Web, ma i dati della casella di controllo non vengono inviati. Voglio sapere quali, se ce ne sono, delle caselle di controllo sono state controllate. Ho letto di .serialize (), JSON, ecc., Ma nessuno ha funzionato. Devo serializzare / JSON in jQuery e PHP? Come? Un metodo è migliore di un altro quando si inviano i dati del modulo con le checkbox? Sono stato bloccato su questo per 2 giorni. Qualsiasi aiuto sarebbe molto apprezzato. Grazie in anticipo!

 var myCheckboxes = new Array(); $("input:checked").each(function() { data['myCheckboxes[]'].push($(this).val()); }); 

data['myCheckboxes[]'] caselle di controllo su data['myCheckboxes[]'] array errati data['myCheckboxes[]'] invece di myCheckboxes.push

Sì, funziona molto bene con jquery.serialize ()

HTML

 

JQuery

 function submitForm() { var form = document.myform; var dataString = $(form).serialize(); $.ajax({ type:'POST', url:'myurl.php', data: dataString, success: function(data){ $('#myResponse').html(data); } }); return false; } 

ADESSO IL PHP, esporto i dati POST

  echo var_export($_POST); 

Puoi vedere che tutto il valore della casella di controllo è stato inviato. Spero che possa aiutarti

Controllalo.

  

E su myurl.php puoi usare print_r($_POST['myCheckboxes']);

  $.post("test.php", { 'choices[]': ["Jon", "Susan"] }); 

Quindi vorrei solo scorrere le caselle selezionate e build l’array. Qualcosa di simile a.

  var data = { 'user_ids[]' : []}; $(":checked").each(function() { data['user_ids[]'].push($(this).val()); }); $.post("ajax.php", data); 

Il codice che hai al momento sembra andar bene. Controlla cosa contiene la casella di controllo usando questo. Aggiungi questo codice nella parte superiore del tuo script php e vedi se le caselle di controllo vengono passate al tuo script.

 echo '
'.print_r($_POST['myCheckboxes'], true).'

'; exit;

Puoi anche provare questo,

 var arr = $('input[name="myCheckboxes[]"]').map(function(){ return $(this).val(); }).get(); console.log(arr);