我如何PHP序列化一个jQuery序列化的forms?

使用$('#form').serialize() ,我能够发送到一个PHP页面。 现在我如何在PHP中反序列化它? 它在jQuery中被序列化。

你不应该从jquery serialize方法反serialize PHP中的任何东西。 如果您序列化数据,则应将其作为查询参数发送到PHP,如果您使用的是GET方法ajax请求,或者如果您使用POST ajax请求,则发送variables。 所以在PHP中,您可以根据请求types访问像$_POST["varname"]$_GET["varname"]这样的值。

serialize方法只是把表单元素和stringforms。 "varname=val&var2=val2"

假设你的服务器正在接收一个类似这样的string(如果你使用jQuery的serialize()它应该是这样的):

 "param1=someVal&param2=someOtherVal" 

…这样的事情可能是你所需要的一切:

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

然后$params应该是一个数组模型如何你会期望。 注意这也适用于HTML数组。

有关更多信息,请参阅以下内容: http : //www.php.net/manual/en/function.parse-str.php

希望这是有帮助的。 祝你好运!

// jQuery Post

 var arraydata = $('.selector').serialize(); 

// jquery.post序列化var – TO – PHP数组格式

 parse_str($_POST[arraydata], $searcharray); print_r($searcharray); // Only for print array 

//你也是这样

  Array ( [A] => 1 [B] => 2 [C] => 3 [D] => 4 [E] => 5 [F] => 6 [G] => 7 [H] => 8 ) 
 parse_str($_POST['whatever'], $searcharray); 

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> 

PHP页面上:

 <?php if(isset($_POST['data'])) { parse_str($_POST['data'], $searcharray); $data = array( "back_message" => $searcharray['f1'] ); echo json_encode($data); } ?> 

在这个php代码中,返回f1字段。

为什么不使用关联数组,所以你可以很容易地使用它

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

问候

修改Murtaza侯赛因答案:

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

只要做到这一点

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

我不知道你正在使用的是哪个版本的jquery,但是这在jquery 1.3中适用于我:

 $.ajax({ type: 'POST', url: your url, data: $('#'+form_id).serialize(), success: function(data) { $('#debug').html(data); } }); 

然后你可以像在php中一样使用POST数组键。 试试print_r()

我想你是在一个对象的属性中包装序列化的表单值,据我所知,这是毫无用处的。

希望这可以帮助!