2014-02-19 4 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) { 

Когда код отправки страницы РНР в этом формате:

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» - это то, что получено на php-странице после того, как сериализатор используется в javascript-коде – 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 может только десериализируются строки сериализовать РНР serialize.

С учетом сказанного, функция разбора строки запроса в PHP будет

Сокращенный пример из PHP Manual:

$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

Я пытаюсь получить данные из текстовых полей там, где они были отмечены. Вот почему я использовал функцию сериализации. Dunno почему, но с JSON.stringify он не работал. – user3282988

+0

Если бы вы могли дать мне код, который вы использовали для его сериализации с помощью JSON, я мог бы вам помочь. Вы также можете выбрать другой формат, такой как простая строка запроса, как сказал @Gordon. – g00glen00b

Смежные вопросы