Cómo enviar datos de formulario serializados usando JQuery si el elemento de entrada es una matriz

3 minutos de lectura

Tengo este fragmento de código en mi código PHP:

while ($row = mysqli_fetch_assoc($result))
{
    extract($row);
    echo "<tr>";
    echo "<td bgcolor="#FFFFFF"><input id='bookArray[]' name="bookArray[]" type="checkbox" value="$book_id" />$book_id</td>";
    echo "<td bgcolor="#FFFFFF">$threat_name</td>";
    echo "</tr>";
}

En la página HTML, quiero usar el método jQuery serialize() para enviar una matriz de libros seleccionados en bookArray[]. En mi JavaScript,

var selectedbooks = $("book_form").serialize();
alert (selectedbooks); 

En el cuadro de mensaje de alerta, no obtuve ningún valor (cadena vacía).

Anteriormente, cuando usaba Prototype, funcionaba bien.

fácil: serialize().replace(/%5B%5D/g, '[]')

  • Buena idea, excepto que debería ser serialize().replace(/%5B%5D/g, ‘[]’);

    – servicio postal14

    12 de septiembre de 2009 a las 21:58

  • (Porque, si no es una expresión regular con la propiedad global, solo se reemplaza la primera coincidencia).

    – JKS

    23 de agosto de 2010 a las 23:03

  • no quiero perder el tiempo, debe recordar eliminar las comillas simples alrededor de la expresión regular :))

    – MC_delta_T

    3 de diciembre de 2014 a las 14:56

Se me ocurrió un método que, cuando los datos se envían mediante correo

en el otro lado le permite acceder a sus elementos usando $_['post']['name']

Si es una matriz (por ejemplo, una selección múltiple), entonces en su servidor puede acceder a ella como una matriz nuevamente $_POST['myselect'][0]...

Código:
Función para serializar datos de formulario para publicación.

function serializePost(form) {
    var data = {};
    form = $(form).serializeArray();
    for (var i = form.length; i--;) {
        var name = form[i].name;
        var value = form[i].value;
        var index = name.indexOf('[]');
        if (index > -1) {
            name = name.substring(0, index);
            if (!(name in data)) {
                data[name] = [];
            }
            data[name].push(value);
        }
        else
            data[name] = value;
    }
    return data;
}

avatar de usuario
Daniel Gafitescu

var arTags = new Array();

jQuery.map( $("input[name="tags[]"]") , function(obj,index)
{
   arTags .push($(obj).val());
});

var obj = {'new_tags'           : $("#interest").val() ,
           'allready_tags[]'  : arTags };

var post_data = jQuery.param(obj,true);

$.ajax({
      type :  'POST',
      url  :  'some_url',
      data :  post_data,
      dataType : "html",
      success: function(htmlResponse)
      {

      }
});

Funcionalidad de serialización de prototipo/Scriptaculous para jQuery:

<script>
function toObjectMap( queryString )
{
    return '{\'' + queryString.replace(/=/g, '\':\'').replace(/&/g, '\',\'') + '\'}';
}
</script>
...
<div id="result"></div>
...
<form onSubmit="$('#result').load( ajaxURL, toObjectMap( $('#formId').serialize() ) );" ...>
...

@Tomalak Puede usar los caracteres de corchetes “[” and “]” dentro de XHTML ver
http://www.w3.org/TR/xhtml1/dtds.html#dtdentry_xhtml1-transitional.dtd_input

Esto significa que un nombre puede contener muchos caracteres diferentes legalmente dentro de XHTML, aunque no tiene mucho sentido usar barras o corchetes. PHP admite el uso de la notación de matriz en los nombres de los formularios, por lo que podría perderse un truco si no usa la notación de matriz en algunos casos.

avatar de usuario
Filo

jQuery 1.4

var myform = $("book_form").serialize();

decodeURIComponent(myform);

avatar de usuario
Comunidad

funciona correctamente jquery =>

var data = $('form').serialize();
            $.post(baseUrl+'/ajax.php',
                    {action:'saveData',data:data},
                    function( data ) {
                        alert(data);
                    });

php =>

parse_str($_POST['data'], $searcharray);
    echo ('<PRE>');print_r($searcharray);echo ('</PRE>');

salida =>

[query] => 
[search_type] => 0
[motive_note] => 
[id_state] => 1
[sel_status] => Array
    (
        [8] => 0
        [7] => 1
    )

y puede hacer lo que quiera con datos de matriz, gracias a Aridane https://stackoverflow.com/questions/1792603

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad