我有一个数组,我正在使用serialize转换为字符串:
$.ajax({
url: "admin/adminProccess.php",
type: "get",
data: $('#idPriv:checked').serialize().replace(/http%3A%2F%2F/g,'#http#') + '&str=' + 'deleteAdmin',
success: function(data) {
当代码发送到php页面时,格式为:
443d77a90e9eb5524fd4e305eb263885:0
所以,我使用unserialize
函数返回一个数组。但我不知道为什么我会得到错误的回应;
这是我在php页面中使用的代码:
for ($i=0;$i<count($idPriv);$i++){
$test=$_GET['idPriv'][$i];
$test = unserialize($test);;
var_dump($test);
}
我做错了吗?我
答案 0 :(得分:3)
来自jQuery's manual on serialize
:
将表单序列化为可以在Ajax请求中发送到服务器的查询字符串。
所以它的作用是获取一些表单值并将它们转换为查询字符串,如
single=Single&multiple=Multiple&multiple=Multiple3
从存储的表示
创建PHP值
存储的表示形式是PHP独有的,看起来像这样:
O:1:"a":1:{s:5:"value";s:3:"100";}
换句话说,您正在尝试反序列化查询字符串,而PHP只能反序列化使用PHP serialize
序列化的字符串。
话虽如此,在PHP中解析查询字符串的函数将是
PHP手册中的摘要示例:
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
答案 1 :(得分:1)
序列化是一种特定于环境的过程。如果您使用Java / PHP / JavaScript / ...序列化某些内容,那么它只能使用相同的环境进行反序列化(至少,这是您应该期望的)。
最好的想法是将对象序列化为众所周知的格式,例如JSON。然后,您可以在JavaScript中执行以下操作:
JSON.stringify(myObject);
在PHP中:
<?php
json_decode(myJson);
?>
当然你可以选择其他格式(XML,逗号分隔,查询字符串......),主要线索是你需要序列化/反序列化为两种环境都可以使用的语言。 JSON可能是最明显的一个(在查询字符串旁边)。