jQuery到PHP - 序列化字符串

时间:2011-11-29 21:33:05

标签: php jquery string codeigniter serialization

我目前正在使用AJAX登录表单。

var data = $(this).serialize();

这是我发送的数据,我使用Codeigniter通过PHP得到这个,如下所示:

$ajax = $this->input->post('data');

这会像您期望的那样返回username=john&password=doe

如何将其转换为数组?我已经尝试过unserialize()并且我得到了空。

6 个答案:

答案 0 :(得分:4)

我相信你可以使用PHP的parse_str()函数:http://php.net/manual/en/function.parse-str.php

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

?>

使用您的代码:

parse_str($this->input->post('data'), $ajax);
echo $ajax['username'] . "/" . $ajax['password'];

答案 1 :(得分:3)

简短回答是parse_str;

parse_str($ajax, $array);
$array === array('username'=>'john', 'password'=>'doe');

但是,发送ajax数据的方式有点奇怪。为什么要序列化为formencoded字符串并将该字符串作为值发送到'data'参数?你为什么不直接发送?然后,您可以使用$this->input->post('username') === 'john'而无需额外的反序列化级别。

例如,执行此操作:

$.post(url, $(form).serialize());

而不是这个(你似乎在做什么:

$.post(url, {data:$(form).serialize()});

答案 2 :(得分:1)

答案 3 :(得分:1)

$parameters = array();

foreach ( explode( '&', $ajax ) as $parameterAndValue ) {
    list ( $parameter, $value ) = explode( '=', $parameterAndValue );
    $parameters[$parameter] = $value;
}

答案 4 :(得分:0)

我是guest,我们可以使用普通请求,它使用GET或POST来保护来自ajax的请求类型,然后在php中我们可以像普通帖子一样使用,例如$_POST['username']$_GET['username']我们不必使用函数来反序列化,并且使用CI进行验证就像正常使用一样调用$this->input->post('username'),我错了吗?

答案 5 :(得分:0)

只需使用如下

<?php $username = $this->input->post('username');?>
<?php $password= $this->input->post('password');?>

您可以对上述变量做任何事情