За последние 24 часа нас посетили 16722 программиста и 1644 робота. Сейчас ищут 963 программиста ...

serialize-unserialize js php прошу помощи

Тема в разделе "JavaScript и AJAX", создана пользователем mrmammoth, 19 мар 2014.

  1. mrmammoth

    mrmammoth Новичок

    С нами с:
    19 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте
    Столкнулся с проблемой: есть такой скрипт.
    Код (Text):
    1. <script type='text/javascript'>
    2.             function doAddContainer() {
    3.                 obj = {
    4.                         name: "tile002",
    5.                         thumbnail: "images/widget_scroll.png",
    6.                         content: "tile001",
    7.                         url: "tiles/blank.php",
    8.                         size: "4x2",
    9.                         theme: "orange",
    10.                         link: ""
    11.                     };
    12.                 tile = {
    13.                     size:   "4",
    14.                     theme:  "container2",
    15.                     name:   "container2",
    16.                     tiles: obj
    17.                      
    18.                 };
    19.      
    20.                 var cc = document.getElementById('plugin_textarea_string');
    21.                 tiles = cc.value;
    22.                 tile_containers = unserialize(tiles);
    23.                 tile_containers[tile_containers.length] = tile;
    24.                 document.getElementById('plugin_textarea_string').value = serialize(tile_containers);
    25.      
    26.      
    27.             }
    28.         </script>
    у него на входе следущая строка из php:
    a:1:{i:0;a:4:{s:4:"size";s:1:"4";s:5:"theme";s:10: "container1";s:4:"name";s:10:"container1";s:5:"til es";a:1:{i:0;a:7:{s:4:"name";s:7:"tile001";s:9:"th umbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}}

    скрипт должен добавить в составной массив ещё один объект и отправить его в php, соорудив вот такую "правильную" строку:

    a:2:{i:0;a:4:{s:4:"size";s:1:"4";s:5:"theme";s:10: "container1";s:4:"name";s:10:"container1";s:5:"til es";a:1:{i:0;a:7:{s:4:"name";s:7:"tile001";s:9:"th umbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}i:1;a:4:{s:4:"size";s: 1:"4";s:5:"theme";s:10:"container2";s:4:"name";s:1 0:"container2";s:5:"tiles";a:1:{i:0;a:7:{s:4:"name ";s:7:"tile002";s:9:"thumbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}}

    но получается вот такая "неправильная":

    a:2:{i:0;a:4:{s:4:"size";s:1:"4";s:5:"theme";s:10: "container1";s:4:"name";s:10:"container1";s:5:"til es";a:1:{i:0;a:7:{s:4:"name";s:7:"tile001";s:9:"th umbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}i:1;a:4:{s:4:"size";s: 1:"4";s:5:"theme";s:10:"container2";s:4:"name";s:1 0:"container2";s:5:"tiles";a:7:{s:4:"name";s:7:"ti le002";s:9:"thumbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}

    как получается "правильная" строка в php:
    Код (Text):
    1. $str = serialize(
    2.         array(
    3.             array (
    4.                 'size'  => '4',
    5.                 'theme' => 'container1',
    6.                 'name'  => 'container1',
    7.                 'tiles' =>
    8.                 array(
    9.                     array(
    10.                         'name'        => 'tile001',
    11.                         'thumbnail'   => 'images/widget_scroll.png',
    12.                         'content'     => 'tile001',
    13.                         'url'         => 'tiles/blank.php',
    14.                         'size'        => '4x2',
    15.                         'theme'       => 'orange',
    16.                         'link'        => ''
    17.                     )
    18.                 )
    19.             ),
    20.             array (
    21.                 'size'  => '4',
    22.                 'theme' => 'container2',
    23.                 'name'  => 'container2',
    24.                 'tiles' =>
    25.                 array(
    26.                     array(
    27.                         'name'        => 'tile002',
    28.                         'thumbnail'   => 'images/widget_scroll.png',
    29.                         'content'     => 'tile001',
    30.                         'url'         => 'tiles/blank.php',
    31.                         'size'        => '4x2',
    32.                         'theme'       => 'orange',
    33.                         'link'        => ''
    34.                     )
    35.                 )
    36.             )
    37.         )
    38.     );

    пользовательские функции serialize и unserialize работают корректно.
    убирал эту строку tile_containers[tile_containers.length] = tile;
    и давал на вход скрипта от php "правильную" строку. После парсинга в обе стороны она остаётся такой же.

    Собственно вопрос: как всё-таки получить при работе скрипта "правильную".
    Просьба не предлагать решить проблему при помощи JSON, так как это создаст массу других
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Json ;)
    а проблема то как раз то что ты сейчас делаешь.
     
  3. mrmammoth

    mrmammoth Новичок

    С нами с:
    19 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    т.е. получить корректную строку в js невозможно?

    Добавлено спустя 28 минут 21 секунду:
    Проблема решена:
    Код (Text):
    1. <script type='text/javascript'>
    2.         function doAddContainer() {
    3.             obj = {
    4.                 name: "tile002",
    5.                 thumbnail: "images/widget_scroll.png",
    6.                 content: "tile001",
    7.                 url: "tiles/blank.php",
    8.                 size: "4x2",
    9.                 theme: "orange",
    10.                 link: ""
    11.             };
    12.             objobj = { obj: obj };
    13.             tile = {
    14.                 size: "4",
    15.                 theme: "container2",
    16.                 name: "container2",
    17.                 tiles: objobj
    18.  
    19.             };
    20.  
    21.             var cc = document.getElementById('plugin_textarea_string');
    22.             tiles = cc.value;
    23.             tile_containers = unserialize(tiles);
    24.             tile_containers[tile_containers.length] = tile;
    25.  
    26.             document.getElementById('plugin_textarea_string').value = serialize(tile_containers);
    27.  
    28.  
    29.         }
    30.     </script>
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Корректную строку получить несложно. Просто с json в яваскрипте работать проще.
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Каких?
     
  6. mrmammoth

    mrmammoth Новичок

    С нами с:
    19 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    Например Json вложенные массивы вместо array частенько делает stdClass object.
    Придётся вылавливать в чужом коде все подобные места.
    Проще добить то, что есть.
    А с нуля - разумеется я бы использовал Json
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Код (PHP):
    1. $array = [
    2.   'firstLevel' => [
    3.     'secondLevel1' => 'value1',
    4.     'secondLevel2' => 'value1'
    5.   ]
    6. ];
    7. $json = json_encode($array);
    8.  
    9. /* stdClass */
    10.  
    11. /* array */
    12. print_r(json_decode($json, true));
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не всё ли равно?