recorrer - ¿Cómo puedo PHP-unserialize un jQuery-serialized form?
serialize ajax post php (12)
Usando $(''#form'').serialize()
, pude enviar esto a una página de PHP. ¿Ahora cómo puedo deserializarlo en PHP? Fue serializado en jQuery.
¿Por qué no utilizas una matriz asociativa para que puedas 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
// 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
)
Creo que debe separar los nombres de los formularios de sus valores, un método para hacerlo es explotar (&)
para que obtenga attribute=value,attribute2=value
.
Mi punto aquí es que convertirás la cadena jQuery serializada en matrices en PHP.
Estos son los pasos que debe seguir para ser más específico.
- Pasó el
jQuery
serializado a una páginaPHP
(por ejemplo,ajax.php
) donde usa$.ajax
para enviarlo usando post u get. - Desde tu página php, explota el
(&)
separando así cada atributo. Ahora obtendrás attribute1 = value, attribute2 = value, ahora obtendrás una variable php array. por ejemplo,$data = array("attribute1=value","attribute2=value")
- Haga un
foreach
en$data
yexplode
el(=)
para que pueda separar el atributo del valor, y asegúrese deurldecode
el valor para que convierta valores serializados al valor que necesita, e inserte el atributo y su valor a una nueva variable de matriz, que almacena el atributo y el valor de la cadena serializada.
Avíseme si necesita más aclaraciones.
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 de 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, devuelve el campo f1
.
Esto es en respuesta al usuario1256561. Gracias por tu 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 la url será como: attribute1 = value1 & attribute2 = value2 & attribute3 = value3 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 utilizar esta información más.
Array
(
[0] => attribute1
[1] => value1
[2] => attribute2
[3] => value2
[4] => attribute3
[5] => value3
)
No debería tener que volver a serialize
nada en PHP desde el método jquery serialize
. Si serializa los datos, debe enviarlos a PHP como parámetros de consulta si está utilizando un método GET ajax request o post vars si está utilizando una solicitud POST ajax. Entonces, en PHP, tendría acceso a valores como $_POST["varname"]
o $_GET["varname"]
dependiendo del tipo de solicitud.
El método de serialize
simplemente toma los elementos del formulario y los pone en forma de cadena. "varname=val&var2=val2"
No sé qué versión de Jquery está utilizando, 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);
}
});
Entonces puede acceder a las claves POST array como lo haría normalmente en php. Solo prueba con print_r()
.
Creo que está envolviendo el valor del formulario serializado en la propiedad de un objeto, lo cual es inútil hasta donde yo sé.
¡Espero que esto ayude!
Respuesta modificada de Murtaza Hussain :
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
Siempre que su servidor esté recibiendo una cadena que se parece a esto (que debería ser 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
debería ser una matriz modelada de la forma esperada. 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!
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''] );
Solo necesitas el nombre del atributo de valor en la forma. 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;
}
?>
parse_str($_POST[''whatever''], $searcharray);