反序列化jQuery序列化表单时PHP反序列化错误

时间:2012-10-07 11:48:52

标签: php jquery

  

可能重复:
  What to do with php after jquery .serialize()

我使用jQuery序列化以下表单,使用ajax将其发送到服务器并使用PHP反序列化。

当我反序列化时,我收到错误:

Error at offset 0 of 39 bytes

<form  id="Marriage" style="display: none">
  <input type="text" name="city" class="txtt" value="city"/>
  <input type='button' value='Apply' id="msendsend" class="sendaf" name="jobforming"/>
</form>

这是发送此表单的jquery函数

  $(document).ready(function () {
    $('#msendsend').click(function () {
        var id=getParam('ID');
        $.ajax({
            type:'POST',
            url:"send.php",

            data:{option:'apply',  sr:$("form").serialize()},
            success:function (jd) {
            }
        });
    });
});

这是服务器代码:

 if($_REQUEST['option']=='catapply') {
    $sc=$_POST['sr'];
    mysql_query("insert into user_data(uid,data) values('$session->userid','$sc')");
  }

在这里,我正在反序化。

 $sql = mysql_query("SELECT * from user_data");
        while ($row = mysql_fetch_array($sql)) {
            $un = unserialize($row['data']);

            $city=$un['city'];
            echo $city;
        }

数据库中的数据显示为

to=&select_category=25&msg=&city=laho

1 个答案:

答案 0 :(得分:4)

jQuery的序列化函数与PHP的不同。它会创建一个查询字符串,您可以在数据库中看到 可以使用parse_str function在PHP中解码此格式。使用它而不是反序列化。

不是手动解析它,而是最好将表单数据作为查询字符串发布:

data: $("form").serialize(), 

您可以添加隐藏字段以传达选项=应用值。

这样,你不需要解码任何东西(它已经在$ _POST中),你可以在一个单独的行中插入每个值。它将来会为您节省很多麻烦,例如:当有更多数据并且您需要搜索它时。