2011-12-25 57 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); 
相关问题