Utilizando $('#form').serialize()
, pude enviar esto a una página PHP. Ahora, ¿cómo puedo deserializarlo en PHP? Fue serializado en jQuery.
Utilizando $('#form').serialize()
, pude enviar esto a una página PHP. Ahora, ¿cómo puedo deserializarlo en PHP? Fue serializado en jQuery.
Respuestas:
No debería tener que anular la serialización de nada en PHP desde el serialize
método jquery . Si serializa los datos, debe enviarse a PHP como parámetros de consulta si está utilizando una solicitud ajax del método GET o publicar vars si está utilizando una solicitud ajax POST. Entonces, en PHP, accedería a valores como $_POST["varname"]
o$_GET["varname"]
dependiendo del tipo de solicitud.
El serialize
método solo toma los elementos del formulario y los pone en forma de cadena."varname=val&var2=val2"
serialize
devuelve. Vea la respuesta realmente popular a continuación.
Siempre que su servidor esté recibiendo una cadena que se parece a esto (que debería si está usando jQuery serialize()
):
"param1=someVal¶m2=someOtherVal"
... algo como esto es probablemente todo lo que necesitas:
$params = array();
parse_str($_GET, $params);
$params
entonces debería ser una matriz modelada como cabría esperar. Tenga en cuenta que esto también funciona con matrices HTML.
Consulte lo siguiente para obtener más información: http://www.php.net/manual/en/function.parse-str.php
Espero que sea útil. ¡Buena suerte!
// jQuery Post
var arraydata = $('.selector').serialize();
// jquery.post serialized var - TO - PHP Array format
parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array
// Obtienes lo mismo de eso
Array (
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
[F] => 6
[G] => 7
[H] => 8
)
En la página HTML :
<script>
function insert_tag()
{
$.ajax({
url: "aaa.php",
type: "POST",
data: {
ssd: "yes",
data: $("#form_insert").serialize()
},
dataType: "JSON",
success: function (jsonStr) {
$("#result1").html(jsonStr['back_message']);
}
});
}
</script>
<form id="form_insert">
<input type="text" name="f1" value="a"/>
<input type="text" name="f2" value="b"/>
<input type="text" name="f3" value="c"/>
<input type="text" name="f4" value="d"/>
<div onclick="insert_tag();"><b>OK</b></div>
<div id="result1">...</div>
</form>
en la página PHP :
<?php
if(isset($_POST['data']))
{
parse_str($_POST['data'], $searcharray);
$data = array(
"back_message" => $searcharray['f1']
);
echo json_encode($data);
}
?>
en este código php, f1
campo de retorno .
¿Por qué no usar una matriz asociativa, para que pueda usarla fácilmente?
function unserializeForm($str) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
$array = explode("=", $item);
$returndata[$array[0]] = $array[1];
}
return $returndata;
}
Saludos
$i = 0;
Respuesta de Murtaza Hussain modificada :
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
Simplemente haz esto
$get = explode('&', $_POST['seri']); // explode with and
foreach ($get as $key => $value) {
$need[substr($value, 0 , strpos($value, '='))] = substr(
$value,
strpos( $value, '=' ) + 1
);
}
// access your query param name=ddd&email=aaaaa&username=wwwww&password=wwww&password=eeee
var_dump($need['name']);
No sé qué versión de Jquery estás usando, pero esto funciona para mí en jquery 1.3:
$.ajax({
type: 'POST',
url: your url,
data: $('#'+form_id).serialize(),
success: function(data) {
$('#debug').html(data);
}
});
Luego puede acceder a las teclas de matriz POST como lo haría normalmente en php. Solo intenta con unprint_r()
.
Creo que está envolviendo el valor del formulario serializado en la propiedad de un objeto, lo que es inútil hasta donde yo sé.
¡Espero que esto ayude!
Esto es en respuesta al usuario 1256561. Gracias por su idea ... sin embargo, no me he ocupado de las cosas de decodificación de URL mencionadas en el paso 3.
así que aquí está el código php que decodificará los datos del formulario serializado, si alguien más lo necesita. Por cierto, use este código a su propia discreción.
function xyz($strfromAjaxPOST)
{
$array = "";
$returndata = "";
$strArray = explode("&", $strfromPOST);
$i = 0;
foreach ($strArray as $str)
{
$array = explode("=", $str);
$returndata[$i] = $array[0];
$i = $i + 1;
$returndata[$i] = $array[1];
$i = $i + 1;
}
print_r($returndata);
}
La entrada de datos de publicación de URL será como: atributo1 = valor1 y atributo2 = valor2 y atributo3 = valor3 y así sucesivamente
La salida del código anterior seguirá estando en una matriz y puede modificarla para asignarla a cualquier variable que desee, y depende de cómo quiera usar más estos datos.
Array
(
[0] => attribute1
[1] => value1
[2] => attribute2
[3] => value2
[4] => attribute3
[5] => value3
)
Solo necesita el nombre del atributo de valor en el formulario. Ejemplo:
Formar
<form id="login_form">
<input type="text" name="username" id="a"/>
<input type="password" name="password" id="b"/>
<button type="button" onclick="login()">Submit</button>
</form>
Javascript
$(document).ready(function(){});
function login(){
var obj = $('#login_form').serialize();
$.post('index.php', obj, function(res){
alert(res);
})
}
PHP - index.php
<?php
if(!empty($POST['username']) && !empty($POST['password'])){
$user = $POST['username'];
$pass = $POST['password'];
$res = "Username : ".$user." || Password : ".$pass;
return $res;
}
?>
Utilizar:
$( '#form' ).serializeArray();
Php get array, no necesita anular la serialización;)
Creo que necesita separar los nombres de los formularios de sus valores, un método para hacerlo es explotar (&)
para obtener attribute=value,attribute2=value
.
Mi punto aquí es que convertirá la cadena jQuery serializada en matrices en PHP.
Estos son los pasos que debe seguir para ser más específico.
jQuery
a una PHP
página (por ejemplo ajax.php
) donde usa$.ajax
enviar usando post u get.(&)
separación de cada atributo. Ahora obtendrá el atributo1 = valor, el atributo2 = valor, ahora obtendrá una variable de matriz php. p.ej$data =
array("attribute1=value","attribute2=value")
foreach
sobre $data
y explode
la (=)
manera que se puede separar el atributo del valor, y estar seguro de que urldecode
el valor para que convertirá los valores serializados con el valor que se necesita, e insertar el atributo y su valor para una nueva variable de matriz, la cual almacena el atributo y el valor de la cadena serializada.Avísame si necesitas más aclaraciones.
Puedes usar esta función:
function post_unserialize( $key ){
$post_data = array();
$post_data = $_POST[ $key ];
unset($_POST[ $key ]);
parse_str($post_data, $post_data);
$_POST = array_merge($_POST, $post_data);
}
Cómo usarlo
$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );