2014-02-19 34 views
0

我有我使用的serialize轉換成一個字符串數組:連載&解序列化功能

$.ajax({ 
    url: "admin/adminProccess.php", 
    type: "get", 
    data: $('#idPriv:checked').serialize().replace(/http%3A%2F%2F/g,'#http#') + '&str=' + 'deleteAdmin', 
    success: function(data) { 

當代碼發送到PHP頁面是這種格式:

443d77a90e9eb5524fd4e305eb263885:0 

所以,我用unserialize函數返回到一個數組中。但我不是爲什麼我得到一個錯誤的迴應;

這是我在PHP頁面中使用的代碼:

for ($i=0;$i<count($idPriv);$i++){ 
    $test=$_GET['idPriv'][$i]; 

    $test = unserialize($test);; 
    var_dump($test); 
} 

難道我做錯了什麼我

+0

在這種格式中,「443d77a90e9eb5524fd4e305eb263885:0」,你確定嗎?檢查:https://api.jquery.com/serialize/。 – leaf

+0

「443d77a90e9eb5524fd4e305eb263885」是md5編碼的。我試圖將這個字符串發送到PHP頁面並將其反序列化。 這個「443d77a90e9eb5524fd4e305eb263885:0」是在javascript代碼中使用序列化後在php頁面中收到的內容 – user3282988

+0

值得一提的是你的問題...... – leaf

回答

3

jQuery's manual on serialize:

序列化形式的查詢字符串可以通過Ajax請求發送到服務器。

所以它的作用是採取某種形式的值,並把它們變成一個查詢字符串

single=Single&multiple=Multiple&multiple=Multiple3 

PHP Manual on unserialize:

創建了一個從存儲的表示PHP的值

存儲的代表離子是唯一的PHP,看起來是這樣的:

O:1:"a":1:{s:5:"value";s:3:"100";} 

換句話說,你試圖反序列化查詢字符串,而PHP可以用PHP的serialize連載只反序列化字符串。

隨着中說,該功能解析查詢字符串在PHP將

從PHP手冊刪節例如:

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

序列化是一個環境特定的過程。如果你使用Java/PHP/JavaScript/...序列化一些東西,那麼它只能使用相同的環境進行反序列化(至少,這是你應該期望的)。

您可以做的最好的想法是將您的對象序列化爲衆所周知的格式,例如JSON。然後,你可以做在JavaScript如下:

JSON.stringify(myObject); 

而在PHP:

<?php 
    json_decode(myJson); 
?> 

當然你可以選擇另一種格式(XML中,逗號分隔,查詢字符串,...),主要線索是您需要序列化/反序列化爲兩種環境都可以使用的語言。 JSON可能是最明顯的一個(在查詢字符串旁邊)。

+0

我想從文本框中的數據那裏檢查..那就是爲什麼我使用序列化函數。不知道爲什麼,但與JSON.stringify它沒有工作。 – user3282988

+0

如果你可以給我你使用JSON序列化的代碼,我可能會幫助你。你也可以選擇像@Gordon所說的簡單查詢字符串。 – g00glen00b