2011-12-25 108 views
0

我能夠在php文件中發送jQuery序列化值。但我不能反序列化php中的jquery序列化值。現在請告訴我如何在php文件中反序列化jquery序列化值。我jQuery代碼是:如何在php中反序列化jQuery序列化值

<script type="text/javascript"> 
    // index.php 
    function get(){ 
     $('#age').hide(); 
     $.post('data.php',{ name: $('form').serialize() }, 

    function (output){ 
     $('#age').html(output).fadeIn(1000); 
    }); 
    } 
</script> 

data.php文件是:

<?php 
echo var_dump(unserialize($_POST['name'])); 
?> 

我使用上面的反序列化的jQuery連載值代碼,但我沒有得到任何結果

回答

1

那麼,你是發送JSON對象到PHP腳本,所以你應該使用json_decode()


最終你沒有得到任何結果,因爲$_POST數據被解釋爲一個字符串,授予一個字符串與JSON語法,但仍然只是一個簡單的PHP字符串。要獲取內容,您必須使用上面鏈接的json_decode()函數。默認情況下,它會返回一個stdClass對象,通過true到第二個參數返回一個關聯數組

// return stdClass or null on error 
$jsonData = json_decode($_POST['name']); 

// return associative array or null on error 
$jsonData = json_decode($_POST['name'], true); 

你應該確保檢查是否存在使用之前儲存在$_POST['name']的值。

4

怎麼樣簡化爲:

<script type="text/javascript"> 
// index.php 
function get(){ 
    $('#age').hide(); 
    $.post('data.php',$('form').serialize(), 
     function (output){ 
      $('#age').html(output).fadeIn(1000); 
    }); 
} 
</script> 

和data.php

<?php 
    $name=$_POST; 
    echo var_dump($name); 
?> 

用序列這裏是同一個表單提交。

1

你不需要反序列化任何東西。該函數的名稱有點誤導。 jQuery的.serialize()創建窗體就像彷彿它是由一個普通的形式,發送例如一個字符串表示,下面的表格上調用.serialize()

<input name="a" value="foo" /> 
<input name="b" value="bar" /> 

將導致該字符串:

a=foo&b=bar 

如果修改Ajax調用:

$.post('data.php', $('form').serialize(), function (output) {...}); 

你的形式將只是在$_POST,準備使用。

0

對不起轉載我的答案100% work for my 正常工作 jQuery的=>

var data = $('form').serialize(); 
      $.post(baseUrl+'/ajax.php', 
        {action:'saveData',data:data}, 
        function(data) { 
         alert(data); 
        }); 

PHP =>

parse_str($_POST['data'], $searcharray); 
    echo ('<PRE>');print_r($searcharray);echo ('</PRE>'); 

輸出=>

[query] => 
[search_type] => 0 
[motive_note] => 
[id_state] => 1 
[sel_status] => Array 
    (
     [8] => 0 
     [7] => 1 
    ) 

,你可以做任何你想用「$ searcharray」變量數據, 感謝Aridane https://stackoverflow.com/questions/1792603

1

一般來說,你不應該有unserialise的數據。

如果數據正在作爲參數傳遞,那麼以下就足夠了。

$form_values = $_POST; 
print_r($form_values); 

但是,有時您可能想要將序列化的字符串作爲窗體的一個字段傳遞。在這種情況下,您可以使用類似以下內容:

$form_values = $_POST; 
$serialised_form_value = $form_values['some_field_from_form']; 
parse_str($serialised_form_value, $field_value); 
print_r($field_value);