2011-11-29 41 views
1

我目前正在AJAX登錄表單。jQuery到PHP - 序列化字符串

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

這是我送的數據,我得到這個用笨象這樣PHP:

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

這將返回username=john&password=doe如你所期望。

如何將其轉換爲數組?我試過做unserialize(),我得到空。

+0

您的問題[這裏](http://stackoverflow.com/a/3817220/388053) –

回答

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']; 
+0

沒的可能答案我嘗試時沒有工作。 – daryl

+0

也許再試一次,我只是嘗試了演示,它按預期工作。 – Jasper

+0

Eugh,這是我的'parse_str'之前的一個錯字! – daryl

1
$parameters = array(); 

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

簡短回答是parse_str;

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

但是,您發送ajax數據的方式有點奇怪。爲什麼要序列化爲一個經過編碼的字符串並將該字符串作爲「數據」參數的值發送?你爲什麼不直接發送它?那麼你可以使用$this->input->post('username') === 'john'而不需要額外的反序列化。

例如,做到這一點:

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

,而不是這個(你似乎在做:

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

我客人,我們可以使用普通的請求,這是保衛從請求類型ajax,使用GET或POST,然後在PHP中,我們可以像使用普通帖子一樣使用,比如$_POST['username']$_GET['username']我們不必使用函數來反序列化,並且使用CI進行驗證就像正常使用一樣調用,$this->input->post('username'),我是錯了?

0

只需使用如下

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

你可以用上述變量做任何事情