serializar procesamiento obtener inputs guardar formularios formulario enviar datos con array php jquery

php - procesamiento - obtener datos de un formulario con jquery



Cómo enviar datos de formulario de serialización usando JQuery si el elemento de entrada es una matriz (14)

Tengo este 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).

Previamente, cuando estoy usando Prototype, funcionó bien.


¡Problema resuelto! Aquí esta lo que hice.

Dentro de un archivo PHP para crear filas de casillas de verificación dinámicas,

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

Ya no uso el método JQuery $ .post. Cambié mi código a la siguiente

var my_query_str = ''''; $("input[@type=''checkbox''][@name=''books'']").each( function() { if(this.checked) { my_query_str += "&bookArray[]=" + this.value; } }); $.ajax( { type: "POST", url: "saveBookList.php", data: "dummy_data=a" + my_query_str, success: function(responseData) { $("#save-result").empty().append(responseData); }, error: function() { $("#save-result").append("An error occured during processing"); } });

Ahora, dentro de la página saveBookList.php, el valor de $ _POST [''bookArray''] es una matriz. ¡Yey! ¡Yey!

Espero y deseo que el método $ .post de JQuery pueda admitir tipos de datos de matriz como lo hace Prototype. :)


Puede que necesites cambiar tu PHP como sugiere @Tomalak, pero también necesitarás cambiar tu javascript. Para hacer referencia a un elemento con nombre, use el selector #name:

var selectedbooks = $(''form#book_form'').serialize();;


Prototype / Scriptaculous serialize funcionalidad 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 Puedes usar los corchetes de los caracteres "[" y "]" 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 forma, por lo que podría perder un truco si no utiliza la notación de matriz en algunos casos.


var data = $(form).serialize(); $.post(''post.php'', ''&''+data);


jQuery 1.4

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


no es un problema con jQuery Post, es con la serialización puedes hacer esto:

var my_query_str = ''''; $("input[@type=''checkbox''][@name=''books'']").each( function() { if(this.checked) { my_query_str += "&bookArray[]=" + this.value; } }); jQuery.post( "saveBookList.php", "dummy_data=a" + my_query_str , function(responseData){ $("#save-result").empty().append(responseData); }, error: function() { $("#save-result").append("An error occured during processing"); } });

pero todo lo que tienes que hacer es reemplazar ''['' & '']'' a sí mismos después de serializarlos. porque serialize (); ¡los cambió a su valor htmlencoded!


He encontrado un método que lo hará, cuando los datos se envíen utilizando publicaciones

por otro lado, te permite acceder a tus elementos usando $_[''post''][''name'']

Si se trata de una matriz (por ejemplo, una selección múltiple), en su servidor puede acceder a ella como una matriz de nuevo $_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; }


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) { } });


Si tiene que publicar esa matriz solamente y no otros campos de entrada, esta es una solución limpia y rápida:

var selectedbooks = $(''book_form input[name^="bookArray["]'').serialize(); alert (selectedbooks);

Explicación

El selector ^ = selecciona todos los elementos con un valor de atributo de nombre que comienza con ''bookArray'', el corchete abierto ''['' asegura que el elemento es la matriz que queremos serializar y no solo una variable que comienza con la cadena ''bookArray''.


Tienes que reemplazar los corchetes de la izquierda y los corchetes de la derecha con esto:

data: $(this).serialize().replace(/%5B/g, ''['').replace(/%5D/g, '']''),


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


trabaja 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 puedes hacer lo que quieras con los datos de la matriz, gracias a Aridane https://.com/questions/1792603


Gracias Tomalak.

En el archivo PHP, estoy usando el siguiente código ahora:

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

** El book_id es único.

Utilizando la solución tvanfosson, ahora puedo obtener una matriz de valor de entrada

var selectedBooks = $ (''form # book_form''). serialize (); alerta (selectedBooks);

Desde el cuadro de mensaje de alerta, obtengo ==> bookArray% 5B% 5D = T2.05 & bookArray% 5B% 5D = T2.81

Ahora, cuando envié el valor de entrada de serialización al archivo PHP usando JQuery

var selectedBooks = $(''form#book_form'').serialize(); alert (selectedBooks); var url = ''saveBookList.php''; // Send to server using JQuery $.post(url, {bookArray: selectedBooks}, function(responseData) { $("#save-result").text(responseData); });

Dentro de saveBookList.php para procesar el formulario de serialización, recibí este error "Se proporcionó un argumento inválido para foreach ()".

Dentro de saveBookList.php,

// If you have selected from list box. if(isset($_POST[''bookArray''])) { // Get array or bookID selected by user $selectedBookId = $_POST[''bookArray'']; echo $selectedBookId; foreach($selectedBookId as $selectListItem) { echo "You sent this -->" . $selectListItem . "/n"; } }

El código PHP anterior funciona bien si estoy enviando usando Prototype.

Para Prototype cuando echo echo $ selectedBookId;

Tengo Array.

Para JQuery, cuando echo echo $ selectedBookId;

Tengo ==> bookArray% 5B% 5D = T4.11 & bookArray% 5B% 5D = T4.38

Mi pregunta, ¿jQuery admite el valor de matriz para el método de publicación?