我目前正在使用AJAX登录表单。
var data = $(this).serialize();
这是我发送的数据,我使用Codeigniter通过PHP得到这个,如下所示:
$ajax = $this->input->post('data');
这会像您期望的那样返回username=john&password=doe
。
如何将其转换为数组?我已经尝试过unserialize()
并且我得到了空。
答案 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)
使用parse_str()
答案 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');?>
您可以对上述变量做任何事情