Come posso annullare la serializzazione di un modulo serializzato jQuery?


160

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.


2
Per domande come queste, consiglio di usare Firebug per vedere quali dati vengono inviati al server in quale formato. Puoi quindi pubblicare facilmente un esempio dei tuoi dati.
chiborg,

Risposte:


65

Non dovresti dover serializzare nulla in PHP dal serializemetodo 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 serializemetodo prende semplicemente gli elementi del modulo e li mette in forma di stringa."varname=val&var2=val2"


3
Questo non è corretto Hai davvero bisogno di analizzare la stringa che serializeritorna. Vedi la risposta molto popolare di seguito.
Isaac Lubow

393

A condizione che il tuo server stia ricevendo una stringa simile a questa (che dovrebbe essere se stai usando jQuery serialize()):

"param1=someVal&param2=someOtherVal"

... qualcosa del genere è probabilmente tutto ciò di cui hai bisogno:

$params = array();
parse_str($_GET, $params);

$paramsdovrebbe 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!


5
Questo è il modo migliore per farlo. parse_str ($ _ REQUEST ['jquery_serialized_values'], $ output); print_r ($ output);
Andy,

2
Questo metodo è MOLTO migliore dell'altro.
dartaco,

3
Come utente che ha dato la risposta accettata, sono d'accordo che QUESTA è la risposta corretta. Ho dato la mia risposta in base al presupposto che la richiesta fosse inviata tramite i metodi jQuery ajax $ .get / post (non sono sicuro da dove l'ho presa) che invia l'output della funzione serialize () come variabili GET standard. quindi non sarebbe richiesto l'analisi delle stringhe. ad esempio: $ .get ('ajax.php', $ ('form'). serialize (), function () {});
Chris Gutierrez,

1
Questa è una sola e accettabile risposta !! Il resto delle risposte sta esagerando con le cose ...
Mr.TK

1
Questa dovrebbe essere la risposta. Poiché il server potrebbe non accettare più di 1000 valori di input, avevo comunque bisogno di un modo per inviarli. Quindi ho serializzato il modulo e ho inviato i dati come un unico valore. Con questa risposta, sono stato in grado di farlo. Grazie @chrisallenlane
websupporter il

51

// 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
 )

Era esattamente quello che stavo cercando!
Jepser Bernardino,

17
parse_str($_POST['whatever'], $searcharray);

10

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, f1campo di ritorno .


5

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


4
Non capisco il tuo$i = 0;
Thielicious il

5

Risposta modificata di Murtaza Hussain :

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}

5

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']);

1

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!


1

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
)

1

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;
}
?>

1

Uso:

$( '#form' ).serializeArray();

Php get array, non è necessario serializzare;)


0

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.

  1. Passato il serializzato jQuerya una PHPpagina (ad esempio ajax.php) in cui si utilizza $.ajaxper inviare tramite posta o ottenere.
  2. Dalla tua pagina php, esplodi (&)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")
  3. Fare un foreachon $datae explodeil (=)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.


0

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' );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.