Usando $('#form').serialize()
, consegui enviar isso para uma página PHP. Agora, como deserializá-lo em PHP? Foi serializado no jQuery.
Usando $('#form').serialize()
, consegui enviar isso para uma página PHP. Agora, como deserializá-lo em PHP? Foi serializado no jQuery.
Respostas:
Você não precisa desserializar nada no PHP a partir do serialize
método jquery . Se você serializar os dados, eles deverão ser enviados ao PHP como parâmetros de consulta se você estiver usando uma solicitação ajax do método GET ou post vars se estiver usando uma solicitação ajax POST. Portanto, no PHP, você acessaria valores como $_POST["varname"]
ou $_GET["varname"]
dependendo do tipo de solicitação.
O serialize
método apenas pega os elementos do formulário e os coloca em forma de string."varname=val&var2=val2"
serialize
retorna. Veja a resposta realmente popular abaixo.
Desde que o seu servidor esteja recebendo uma string parecida com esta (o que deveria acontecer se você estiver usando o jQuery serialize()
):
"param1=someVal¶m2=someOtherVal"
... algo como isto é provavelmente tudo que você precisa:
$params = array();
parse_str($_GET, $params);
$params
deve ser uma matriz modelada como você esperaria. Observe que isso também funciona com matrizes HTML.
Consulte o seguinte para obter mais informações: http://www.php.net/manual/en/function.parse-str.php
Espero que seja útil. Boa sorte!
// Post do jQuery
var arraydata = $('.selector').serialize();
// jquery.post serialized var - TO - formato PHP Array
parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array
// Você obtém o mesmo
Array (
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
[F] => 6
[G] => 7
[H] => 8
)
Na 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>
na página PHP :
<?php
if(isset($_POST['data']))
{
parse_str($_POST['data'], $searcharray);
$data = array(
"back_message" => $searcharray['f1']
);
echo json_encode($data);
}
?>
neste código php, retorne o f1
campo.
Por que não usar array associativo, para que você possa usá-lo facilmente
function unserializeForm($str) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
$array = explode("=", $item);
$returndata[$array[0]] = $array[1];
}
return $returndata;
}
Saudações
$i = 0;
Resposta Murtaza Hussain modificada :
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
Simplesmente faça isso
$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']);
Não sei qual versão do Jquery você está usando, mas isso funciona para mim no jquery 1.3:
$.ajax({
type: 'POST',
url: your url,
data: $('#'+form_id).serialize(),
success: function(data) {
$('#debug').html(data);
}
});
Então você pode acessar as chaves do array POST como faria normalmente no php. Apenas tente com umprint_r()
.
Eu acho que você está agrupando o valor do formulário serializado na propriedade de um objeto, que é inútil até onde eu sei.
Espero que isto ajude!
Isso está em resposta ao usuário1256561. Obrigado pela sua idéia .. no entanto, eu não cuidei do material de decodificação de URL mencionado na etapa 3.
então aqui está o código php que decodificará os dados do formulário serializado, se mais alguém precisar. A propósito, use esse código a seu critério.
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);
}
A entrada de dados de postagem da URL será como: attribute1 = value1 & attribute2 = value2 & attribute3 = value3 e assim por diante
A saída do código acima ainda estará em uma matriz e você poderá modificá-lo para atribuí-lo a qualquer variável que desejar e isso depende de como você deseja usar esses dados ainda mais.
Array
(
[0] => attribute1
[1] => value1
[2] => attribute2
[3] => value2
[4] => attribute3
[5] => value3
)
Você só precisa do nome do atributo de valor no formulário. Exemplo:
Formato
<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;
}
?>
Usar:
$( '#form' ).serializeArray();
Php get array, não precisa desserializar;)
Eu acho que você precisa separar os nomes dos formulários dos seus valores, um método para fazer isso é explodir (&)
para que você obtenha attribute=value,attribute2=value
.
Meu argumento aqui é que você converterá a seqüência de caracteres jQuery serializada em matrizes no PHP.
Aqui estão as etapas que você deve seguir para ser mais específico.
jQuery
para uma PHP
página (por exemplo ajax.php
) onde você usa $.ajax
para enviar usando postagem ou recebimento.(&)
que separa cada atributo. Agora você receberá attribute1 = value, attribute2 = value, agora receberá uma variável de array php. por exemplo$data =
array("attribute1=value","attribute2=value")
foreach
sobre $data
e explode
o(=)
para poder separar o atributo do valor e certifique-se de urldecode
que ele converta valores serializados no valor que você precisa e insira o atributo e seu valor em uma nova variável de matriz, que armazena o atributo e o valor da sequência serializada.Entre em contato se precisar de mais esclarecimentos.
Você pode usar esta função:
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);
}
Como usá-lo
$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );