Войти

Показать полную графическую версию : [решено] Структура данных для JavaScript


Coutty
10-08-2007, 14:52
Есть, скажем, такой XML-документ:
<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
Coutty,
Надо просто правильные слова в поиск вводить :)

Пример (http://www.xmlscout.com/)
Ещё один (http://www.jeremie.com/Dev/XML/)

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

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

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

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

Coutty
10-08-2007, 16:16
Лучше воспользоваться аяксом и возвращать JSON
Хм... Может тогда вместо XML использовать JSON для хранения данных?
Сейчас проект ещё только в самом начале пути. Но только я не сталкивался с этим форматом. Как эту структуру вообще использовать?

Например, в Википедии такой образец:
{
"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
Coutty,
JSON - это формат для более быстрой обработки Java-Script-ом. Когда получаем данные в JSON - их достаточно обработать функцией eval и результат присвоить переменной в JavaScript.

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

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

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

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

Когда получаем данные в JSON - их достаточно обработать функцией eval и результат присвоить переменной в JavaScript.
Это как? :sorry:
var cell = eval ("data/map.js"); ?

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

vadimiron
10-08-2007, 18:48
var cell = eval ("data/map.js"); ?
Не, с помощью Аякса получаем HTTP-Response и Body этого Response-а будет JSON-код.

Начиная с PHP 5.2, JSON - расширение для PHP. Если расширения нет или более старая версия, то парочка в сравнении (http://gggeek.altervista.org/sw/article_20061113.html)

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

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

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

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

Coutty
11-08-2007, 17:30
В итоге остановился на таком решении:
Данные хранятся в JSON-формате.
Для подгрузки этих данных используется объект JsHttpRequest из одноимённой библиотеки.
Для конвертации JSON в JS-объект используется строка вида var myObject = eval('(' + myJSON + ')');
А для обращения к данным уже myObject.map[0][2].type и т.д.

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




© OSzone.net 2001-2012