我如何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¶m2=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()
。
我想你是在一个对象的属性中包装序列化的表单值,据我所知,这是毫无用处的。
希望这可以帮助!