En utilisant $('#form').serialize()
, j'ai pu envoyer ceci sur une page PHP. Maintenant, comment le désérialiser en PHP? Il a été sérialisé dans jQuery.
En utilisant $('#form').serialize()
, j'ai pu envoyer ceci sur une page PHP. Maintenant, comment le désérialiser en PHP? Il a été sérialisé dans jQuery.
Réponses:
Vous ne devriez pas avoir à désérialiser quoi que ce soit en PHP de la serialize
méthode jquery . Si vous sérialisez les données, elles doivent être envoyées à PHP en tant que paramètres de requête si vous utilisez une requête ajax de la méthode GET ou post vars si vous utilisez une requête POST ajax. Donc en PHP, vous accéderiez à des valeurs comme $_POST["varname"]
ou$_GET["varname"]
fonction du type de requête.
La serialize
méthode prend simplement les éléments du formulaire et les met sous forme de chaîne."varname=val&var2=val2"
serialize
retourne. Voir la réponse très populaire ci-dessous.
À condition que votre serveur reçoive une chaîne qui ressemble à quelque chose comme ceci (ce qu'il devrait si vous utilisez jQuery serialize()
):
"param1=someVal¶m2=someOtherVal"
... quelque chose comme ça est probablement tout ce dont vous avez besoin:
$params = array();
parse_str($_GET, $params);
$params
devrait alors être un tableau modélisé comme vous vous attendez. Notez que cela fonctionne également avec les tableaux HTML.
Consultez les informations suivantes pour plus d'informations: http://www.php.net/manual/en/function.parse-str.php
J'espère que c'est utile. Bonne chance!
// jQuery Post
var arraydata = $('.selector').serialize();
// jquery.post sérialisé var - TO - Format PHP Array
parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array
// Vous obtenez la même chose
Array (
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
[F] => 6
[G] => 7
[H] => 8
)
Dans la page 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>
sur la page PHP :
<?php
if(isset($_POST['data']))
{
parse_str($_POST['data'], $searcharray);
$data = array(
"back_message" => $searcharray['f1']
);
echo json_encode($data);
}
?>
sur ce code php, retournez le f1
champ.
Pourquoi ne pas utiliser de tableau associatif pour pouvoir l'utiliser facilement
function unserializeForm($str) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
$array = explode("=", $item);
$returndata[$array[0]] = $array[1];
}
return $returndata;
}
Cordialement
$i = 0;
Réponse modifiée de Murtaza Hussain :
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
Faites simplement ceci
$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']);
Je ne sais pas quelle version de Jquery vous utilisez, mais cela fonctionne pour moi dans jquery 1.3:
$.ajax({
type: 'POST',
url: your url,
data: $('#'+form_id).serialize(),
success: function(data) {
$('#debug').html(data);
}
});
Ensuite, vous pouvez accéder aux clés du tableau POST comme vous le feriez normalement en php. Essayez simplement avec un print_r()
.
Je pense que vous encapsulez la valeur du formulaire sérialisé dans la propriété d'un objet, ce qui est inutile à ma connaissance.
J'espère que cela t'aides!
Ceci est en réponse à user1256561. Merci pour votre idée. Cependant, je n'ai pas pris soin des trucs de décodage d'url mentionnés à l'étape 3.
voici donc le code php qui décodera les données du formulaire sérialisé, si quelqu'un d'autre en a besoin. À propos, utilisez ce code à votre propre discrétion.
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);
}
L'entrée de données de publication d'url sera comme: attribut1 = valeur1 & attribut2 = valeur2 & attribut3 = valeur3 et ainsi de suite
La sortie du code ci-dessus sera toujours dans un tableau et vous pouvez le modifier pour l'attribuer à n'importe quelle variable de votre choix et cela dépend de la manière dont vous souhaitez utiliser davantage ces données.
Array
(
[0] => attribute1
[1] => value1
[2] => attribute2
[3] => value2
[4] => attribute3
[5] => value3
)
Vous avez juste besoin du nom d'attribut de valeur sous forme. Exemple :
Forme
<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;
}
?>
Utilisation:
$( '#form' ).serializeArray();
Php get array, pas besoin de se désérialiser;)
Je pense que vous devez séparer les noms de formulaire de ses valeurs, une méthode pour ce faire est d'exploser (&)
afin que vous obteniezattribute=value,attribute2=value
.
Mon point ici est que vous allez convertir la chaîne jQuery sérialisée en tableaux en PHP.
Voici les étapes à suivre pour être plus précis.
jQuery
à une PHP
page (par exemple ajax.php
) où vous utilisez$.ajax
pour soumettre en utilisant post ou get.(&)
attributs séparant ainsi chaque attribut. Vous obtiendrez maintenant attribut1 = valeur, attribut2 = valeur, vous obtiendrez maintenant une variable de tableau php. par exemple$data =
array("attribute1=value","attribute2=value")
foreach
on $data
et explode
le (=)
pour pouvoir séparer l'attribut de la valeur, et assurez-vous de urldecode
la valeur afin qu'elle convertisse les valeurs sérialisées en la valeur dont vous avez besoin, et insérez l'attribut et sa valeur dans une nouvelle variable de tableau, qui stocke l'attribut et la valeur de la chaîne sérialisée.Faites-moi savoir si vous avez besoin de plus de précisions.
Vous pouvez utiliser cette fonction:
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);
}
Comment l'utiliser
$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );