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-&gt;input-&gt;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-&gt;input-&gt;post('username'),我错了吗?

【讨论】:

【参考方案6】:

如下简单使用

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

你可以用上面的变量做任何事情

【讨论】:

以上是关于jQuery to PHP - 序列化字符串的主要内容,如果未能解决你的问题,请参考以下文章

javascript jQuery / PHP序列化表单

jQuery AJAX 表单数据使用 PHP 序列化

使用 jQuery 和 PHP 序列化和提交表单

jQuery 序列化数据和 PHP $_POST 不匹配

Jquery序列化表单数据返回错误

如何利用jQuery post传递含特殊字符的数据