jQuery to PHP - 序列化字符串
Posted
技术标签:
【中文标题】jQuery to PHP - 序列化字符串【英文标题】:jQuery to PHP - serialized strings 【发布时间】:2012-01-09 05:19:31 【问题描述】:我目前正在 AJAX 处理登录表单。
var data = $(this).serialize();
这是我要发送的数据,我通过 php 使用 Codeigniter 得到这个:
$ajax = $this->input->post('data');
这将返回您所期望的 username=john&password=doe
。
如何把它变成一个数组?我试过unserialize()
,但我得到了空值。
【问题讨论】:
可能回答你的问题here 【参考方案1】:相信你可以使用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'];
【讨论】:
也许再试一次,我刚刚试了演示,它按预期工作。 呃,之前我的parse_str
打错字了!【参考方案2】:
简短的答案是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());
【讨论】:
【参考方案3】:使用 parse_str()
http://php.net/manual/en/function.parse-str.php
【讨论】:
【参考方案4】:$parameters = array();
foreach ( explode( '&', $ajax ) as $parameterAndValue )
list ( $parameter, $value ) = explode( '=', $parameterAndValue );
$parameters[$parameter] = $value;
【讨论】:
【参考方案5】:我来宾我们可以使用普通请求,它保护来自 ajax 的请求类型,使用 GET 或 POST,然后在 php 中我们可以像普通 post 一样使用,如 $_POST['username']
或 $_GET['username']
我们没有使用函数来反序列化,并使用 CI 进行验证,就像正常使用一样调用 $this->input->post('username')
,我错了吗?
【讨论】:
【参考方案6】:如下简单使用
<?php $username = $this->input->post('username');?>
<?php $password= $this->input->post('password');?>
你可以用上面的变量做任何事情
【讨论】:
以上是关于jQuery to PHP - 序列化字符串的主要内容,如果未能解决你的问题,请参考以下文章