Usando $('#form').serialize()
, sono stato in grado di inviarlo su una pagina PHP. Ora come posso annullare la serializzazione in PHP? È stato serializzato in jQuery.
Usando $('#form').serialize()
, sono stato in grado di inviarlo su una pagina PHP. Ora come posso annullare la serializzazione in PHP? È stato serializzato in jQuery.
Risposte:
Non dovresti dover serializzare nulla in PHP dal serialize
metodo jquery . Se si serializzano i dati, è necessario inviarli a PHP come parametri di query se si utilizza una richiesta Ajax del metodo GET o pubblicare var se si utilizza una richiesta Ajax POST. Quindi in PHP, accederai a valori come $_POST["varname"]
o in $_GET["varname"]
base al tipo di richiesta.
Il serialize
metodo prende semplicemente gli elementi del modulo e li mette in forma di stringa."varname=val&var2=val2"
serialize
ritorna. Vedi la risposta molto popolare di seguito.
A condizione che il tuo server stia ricevendo una stringa simile a questa (che dovrebbe essere se stai usando jQuery serialize()
):
"param1=someVal¶m2=someOtherVal"
... qualcosa del genere è probabilmente tutto ciò di cui hai bisogno:
$params = array();
parse_str($_GET, $params);
$params
dovrebbe quindi essere un array modellato come ti aspetteresti. Nota che funziona anche con array HTML.
Vedere di seguito per ulteriori informazioni: http://www.php.net/manual/en/function.parse-str.php
Spero sia utile. In bocca al lupo!
// jQuery Post
var arraydata = $('.selector').serialize();
// jquery.post serializzato var - TO - Formato array PHP
parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array
// Ottieni lo stesso
Array (
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
[F] => 6
[G] => 7
[H] => 8
)
Nella pagina 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>
sulla pagina PHP :
<?php
if(isset($_POST['data']))
{
parse_str($_POST['data'], $searcharray);
$data = array(
"back_message" => $searcharray['f1']
);
echo json_encode($data);
}
?>
su questo codice php, f1
campo di ritorno .
Perché non usare l'array associativo, così puoi usarlo 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;
}
Saluti
$i = 0;
Risposta modificata di Murtaza Hussain :
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
Fallo e basta
$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']);
Non so quale versione di Jquery stai usando, ma questo funziona per me in jquery 1.3:
$.ajax({
type: 'POST',
url: your url,
data: $('#'+form_id).serialize(),
success: function(data) {
$('#debug').html(data);
}
});
Quindi puoi accedere alle chiavi dell'array POST come faresti normalmente in php. Prova con un print_r()
.
Penso che tu stia avvolgendo il valore di forma serializzato nella proprietà di un oggetto, il che è inutile per quanto ne so.
Spero che questo ti aiuti!
Questo è in risposta all'utente1256561. Grazie per la tua idea .. tuttavia non mi sono occupato delle cose di decodifica dell'URL menzionate nel passaggio 3.
quindi ecco il codice php che decodificherà i dati del modulo serializzato, se qualcun altro ne ha bisogno. A proposito, usa questo codice a tua discrezione.
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'input dei dati post URL sarà simile a: attributo1 = valore1 e attributo2 = valore2 e attributo3 = valore3 e così via
L'output del codice sopra sarà ancora in un array e puoi modificarlo per assegnarlo a qualsiasi variabile tu voglia e dipende da come vuoi usare ulteriormente questi dati.
Array
(
[0] => attribute1
[1] => value1
[2] => attribute2
[3] => value2
[4] => attribute3
[5] => value3
)
Hai solo bisogno del nome dell'attributo valore nel modulo. Esempio :
Modulo
<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;
}
?>
Uso:
$( '#form' ).serializeArray();
Php get array, non è necessario serializzare;)
Penso che sia necessario separare i nomi dei moduli dai suoi valori, un metodo per farlo è quello di esplodere in (&)
modo da ottenere attribute=value,attribute2=value
.
Il punto qui è che convertirai la stringa jQuery serializzata in array in PHP.
Ecco i passaggi da seguire per essere più specifici.
jQuery
a una PHP
pagina (ad esempio ajax.php
) in cui si utilizza $.ajax
per inviare tramite posta o ottenere.(&)
separando così ogni attributo. Ora otterrai attributo1 = valore, attributo2 = valore, ora otterrai una variabile di array php. per esempio$data =
array("attribute1=value","attribute2=value")
foreach
on $data
e explode
il (=)
modo che è possibile separare l'attributo dal valore e assicurarsi urldecode
del valore in modo che convertirà i valori serializzati nel valore necessario e inserire l'attributo e il suo valore in una nuova variabile di matrice, che memorizza l'attributo e il valore della stringa serializzata.Fammi sapere se hai bisogno di ulteriori chiarimenti.
Puoi usare questa funzione:
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);
}
Come usarlo
$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );