使用$('#form').serialize(),我能够将其发送到PHP页面。 现在如何在PHP中反序列化它? 它已在jQuery中序列化。
对于此类问题,我建议使用Firebug查看以何种格式将哪些数据发送到服务器。 然后,您可以轻松地发布数据示例。
前提是您的服务器接收的字符串看起来像这样(如果您使用的是jQuery serialize(),则应该这样):
"param1=someVal¶m2=someOtherVal"
...大概是您所需要的:
$params = array();
parse_str($_GET, $params);
然后,$params应该是一个模拟您期望的数组。请注意,这也适用于HTML数组。
有关更多信息,请参见以下内容:
http://www.php.net/manual/zh/function.parse-str.php
希望对您有所帮助。祝好运!
那是最好的方法。 parse_str($ _ REQUEST [jquery_serialized_values],$ output); print_r($ output);
这个答案应该被接受,实际的是没有答案。
这种方法比其他方法好得多。
这是正确的答案,谢谢chrisallenlane。
辉煌的天使
作为给出接受答案的用户,我同意这是正确的答案。我给出的答案是基于这样的假设,即请求是通过jQuery ajax $ .get / post方法发送的(不确定我从哪里得到的),该方法的确将serialize()函数的输出作为标准GET变量发送。因此不需要字符串解析。例如:$ .get(ajax.php,$(form).serialize(),function(){});
这是一个也是唯一可以接受的答案!!剩下的答案是过分的事情。
这应该是答案。由于服务器可能不接受超过1000个输入值,因此无论如何我都需要一种发送它们的方法。因此,我对表格进行了序列化,并确实将数据作为一个值发送。有了这个答案,我就能做到。谢谢@chrisallenlane
这对我有很大帮助
如何遍历结果数组$params?
请注意,例如,如果您发送的是电子邮件字段,则该字段可能会被urlencode编码,例如@变为%40,因此在这种情况下,PHP parse_str应随附urldecode。
大!这是最好的答案。
根据官方文档:Warning Using this function without the result parameter is highly DISCOURAGED and DEPRECATED as of PHP 7.2. Dynamically setting variables in functions scope suffers from exactly same problems as register_globals. Read section on security of Using Register Globals explaining why it is dangerous.
非常感谢你!这是正确的答案。我能弄清楚我的东西。非常感谢
您无需从jquery serialize方法反序列化PHP中的任何内容。如果对数据进行序列化,则如果使用GET方法ajax请求,则应将其作为查询参数发送给PHP;如果使用POST ajax请求,则应将其作为vars发送。因此,在PHP中,您将根据请求类型访问诸如$_POST["varname"]或$_GET["varname"]之类的值。
serialize方法仅采用表单元素并将其放入字符串形式。 "varname=val&var2=val2"
"是"眨眼;)
这是不正确的。您确实确实需要解析serialize返回的字符串。请参阅下面真正流行的答案。
// 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页面中:
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']);
}
});
}
OK
...
在PHP页面上:
if(isset($_POST['data']))
{
parse_str($_POST['data'], $searcharray);
$data = array(
"back_message" => $searcharray['f1']
);
echo json_encode($data);
}
?>
在此php代码上,返回f1字段。
修改后的Murtaza Hussain答案:
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
为什么不使用关联数组,那么您可以轻松使用它
function unserializeForm($str) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
$array = explode("=", $item);
$returndata[$array[0]] = $array[1];
}
return $returndata;
}
问候
我不明白你的$i = 0;
只需这样做
$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'] );
您只需要表单中的值属性名称。范例:
形成
Submit
Java脚本
$(document).ready(function(){});
function login(){
var obj = $('#login_form').serialize();
$.post('index.php', obj, function(res){
alert(res);
})
}
PHP-index.php
if(!empty($POST['username']) && !empty($POST['password'])){
$user = $POST['username'];
$pass = $POST['password'];
$res ="Username :".$user." || Password :".$pass;
return $res;
}
?>
这是对user1256561的答复。感谢您的想法..但是我没有照顾到step3中提到的url解码内容。
因此,如果有人需要,这里是将对序列化表格数据进行解码的php代码。顺便说一句,您可以自行决定使用此代码。
function xyz($strfromAjaxPOST)
{
$array ="";
$returndata ="";
$strArray = explode("&", $strfromPOST);
$i = 0;
foreach ($strArray as $str)
{
$array = explode("=", $str);
$returndata[$i] = $array[0];
$i = $i + 1;
$returndata[$i] = $array[1];
$i = $i + 1;
}
print_r($returndata);
}
网址发布数据输入将类似于:attribute1 = value1&attribute2 = value2&attribute3 = value3,依此类推
上面代码的输出仍将保留在数组中,您可以对其进行修改以将其分配给所需的任何变量,这取决于您希望进一步使用此数据的方式。
Array
(
[0] => attribute1
[1] => value1
[2] => attribute2
[3] => value2
[4] => attribute3
[5] => value3
)
我不知道您使用的是哪个版本的Jquery,但这在jquery 1.3中对我有用:
$.ajax({
type: 'POST',
url: your url,
data: $('#'+form_id).serialize(),
success: function(data) {
$('#debug').html(data);
}
});
然后,您可以像在php中通常那样访问POST数组键。
只需尝试使用print_r()。
我认为您是将序列化表单值包装在对象的属性中,据我所知这是没有用的。
希望这可以帮助!
使用:
$( '#form' ).serializeArray();
PHP获取数组,不需要反序列化;)
我认为您需要将表单名称与其值分开,执行此操作的一种方法是爆炸(&),以便获得attribute=value,attribute2=value。
我的意思是,您将把序列化的jQuery字符串转换为PHP中的数组。
这是您应该遵循的步骤,以更加具体。
传递序列化的jQuery到PHP页面(例如ajax.php)
您使用$.ajax通过post或get提交的位置。
从您的php页面中,将(&)展开,从而将每个
属性。现在,您将获得attribute1 = value,attribute2 = value,
您将获得一个php数组变量。例如$data =
array("attribute1=value","attribute2=value")
在$data和explode (=)上执行foreach
将属性与值分开,并确保urldecode
该值,以便它将序列化的值转换为该值
您需要的属性,并将属性及其值插入到新数组中
变量,用于存储序列化的属性和值
串。
让我知道是否需要更多说明。