Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Структура данных для JavaScript (http://forum.oszone.net/showthread.php?t=88429)

Coutty 10-08-2007 14:52 625894

Структура данных для JavaScript
 
Есть, скажем, такой XML-документ:
HTML код:

<map>
<settings>
  <field width="5" height="2" />
</settings>

<line num="0">
  <col num="0" type="gray"></col>
  <col num="1" type="gray">some text</col>
  <col num="2" type="gray"></col>
  <col num="3" type="red"></col>
  <col num="4" type="gray"></col>
</line>

<line num="1">
  <col num="0" type="gray"></col>
  <col num="1" type="gray"></col>
  <col num="2" type="red"></col>
  <col num="3" type="red"></col>
  <col num="4" type="gray"></col>
</line>
</map>

Данный файл будет подгружаться с помощью XMLHttpRequest или, м.б., JsHttpRequest. Но вот как его разобрать на переменные?
Нужно получить что-то вроде этого:

field["width"] = 5;
field["height"] = 2;
cell[0][0]["type"] = "gray";
cell[0][0]["content"] = "";
cell[0][1]["type"] = "gray";
cell[0][1]["content"] = "some text";
и т.д.

(хотя, я ещё и не знаю, как массивы в JavaScript выглядят)

Хотелось бы посмотреть рабочий JS или ссылку на материал, где описывается XML-парсер JS на русском.
Даже не знаю с чего начать искать. Запросы в Гугл вида "Обработка XML средствами JavaScript" выводят один сплошной AJAX =(

vadimiron 10-08-2007 15:29 625910

Coutty,
Надо просто правильные слова в поиск вводить :)

Пример
Ещё один

Но я бы всё таки предподчёл парсить на стороне сервера, так как разные браузеры по разному парсят XML (то есть разные объекты для это предоставляют)
Лучше воспользоваться аяксом и возвращать JSON

Хотя если поискать - возможно есть почти идеальная библиотечка, чтобы парсить на стороне клиента

Цитата:

Цитата Coutty
Данный файл будет подгружаться с помощью XMLHttpRequest или, м.б., JsHttpRequest. Но вот как его разобрать на переменные?

Можно вообще скрипту сразу адрес этого документа передавать - он тогда его закачивает и возвращает JSON данного XML-документа - чтобы меньше телодвижений с посылкой файла

Coutty 10-08-2007 16:16 625946

Цитата:

Цитата vadimiron
Лучше воспользоваться аяксом и возвращать JSON

Хм... Может тогда вместо XML использовать JSON для хранения данных?
Сейчас проект ещё только в самом начале пути. Но только я не сталкивался с этим форматом. Как эту структуру вообще использовать?

Например, в Википедии такой образец:
HTML код:

{
    "firstName": "Иван",
    "lastName": "Иванов",
    "address": {
        "streetAddress": "Московское ш., 101, кв.101",
        "city": "Ленинград",
        "postalCode": 101101
    },
    "phoneNumbers": [
        "812 123-1234",
        "916 123-4567"
    ]
}

Это ж как тогда будет выглядеть, если использовать данные подобно моему XML?

Код:

{
  "settings": {
    "field": {
        "width": 5,
        "height": 2
    }
  },
  "line": [
    {
    "num": 0,
    "cols": [
        {
        "num": 0,
        "type": "gray",
        "content": ""
        },
        {
        "num": 1,
        "type": "gray",
        "content": "some text"
        }
... и так далее
    ]
    }
  ]
}

Так?

А потом просто вызывать имяПеременнойКоторойПрисвоилиВсюЭтуСтруктуру.line[0].cols[1].content ? И значение будет "some text"?
Что-то я не особо понял из описания на их сайте json.org.

vadimiron 10-08-2007 17:49 626007

Coutty,
JSON - это формат для более быстрой обработки Java-Script-ом. Когда получаем данные в JSON - их достаточно обработать функцией eval и результат присвоить переменной в JavaScript.

Опишите приложение, которое формирует данные: какой язык и тд.

Для ПХП например, есть уже готовый класс, который из какой либо PHP-структуры создаёт JSON-данные - очень удобно

Coutty 10-08-2007 18:38 626026

Серверная часть - PHP (думаю, что без MySQL будет, но посмотрим).
Но большую часть работы будет делать JavaScript.
Это возможно =^.^= будет стратегическая онлайн игрушка.

XML или JSON будут описывать стуктуру поля, местонахождение объектов и пр. поклеточно.

Цитата:

Цитата vadimiron
Когда получаем данные в JSON - их достаточно обработать функцией eval и результат присвоить переменной в JavaScript.

Это как? :sorry:
var cell = eval ("data/map.js"); ?

В PHP эти данные использоваться вряд ли будут. А вот конвертация стуктуры PHP в JSON - вполне пригодилось бы. Как называется / где взять?

vadimiron 10-08-2007 18:48 626030

Цитата:

Цитата Coutty
var cell = eval ("data/map.js"); ?

Не, с помощью Аякса получаем HTTP-Response и Body этого Response-а будет JSON-код.

Начиная с PHP 5.2, JSON - расширение для PHP. Если расширения нет или более старая версия, то парочка в сравнении

Coutty 10-08-2007 19:37 626059

vadimiron, ммм... А если всё-таки без Аякса обойтись? Например, просто скрипт подключить, где будет JSON-код находиться (т.е. последовательно в html загружать скрипты - JSON, а следом - обработчик его). То как в этом случае использовать?

Цитата:

Цитата vadimiron
Начиная с PHP 5.2, JSON - расширение для PHP.

Нет, у меня даже на локальном хосте он старее. Про хостинг (потенциально) и говорить не приходится. Вряд ли они там обновляют часто.

Цитата:

Цитата vadimiron
то парочка в сравнении

Так там вроде подразумевается использование расширений PHP, Pear, Zend и т.д. На хостинге могут и не поставить. Или оно в качестве подключаемого файла php работает?

Я ещё так подумал - а откуда PHP-скрипт возьмёт данные? Это ж JS их будет генерировать на основе пользовательских действий и передавать готовый результат на сохранение... Т.ч., пожалуй, из JS придётся сочинять. Но, думаю, это несложно будет и самому сделать. Разобраться только в его структуре. А до этого ещё выяснить - как использовать JSON-данные =)

Coutty 11-08-2007 17:30 626305

В итоге остановился на таком решении:
Данные хранятся в JSON-формате.
Для подгрузки этих данных используется объект JsHttpRequest из одноимённой библиотеки.
Для конвертации JSON в JS-объект используется строка вида
Код:

var myObject = eval('(' + myJSON + ')');
А для обращения к данным уже myObject.map[0][2].type и т.д.

Удобно так стало без XML =)


Время: 01:44.

Время: 01:44.
© OSzone.net 2001-