Парсинг данных
Приветствую, уважаемые. Помогите разрешить следующую проблему:
Есть необходимость парсить данные, находящиеся в конце документа и обрабатывать их в дальнейшем, написал такой скрипт: <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head> <body onLoad="init()"> <script language='javascript'> var settings = null; var setid = null; function init() { var elements = document.body.getElementsByTagName("settings"); settings = elements; } </script> <input onclick="window.alert(settings[0].Out22);" value="press" type="button"> </body></html> <settings Out11 = "1" Out22 = "0" Out33 = "0" Out44 = "1" /> /> скрипт нормально работает в IE и возвращает 0, но не работает в firefox, пишет undefined, для того, чтобы он заработал, нужно было поменять строку <input onclick="window.alert(settings[0].Out22);" value="press" type="button"> на <input onclick="window.alert(settings[0].attribute[1].value);" value="press" type="button"> но тогда он не работает в IE, подскажите пожалуйста, где косяк? |
А зачем передавать параметры в DOM, если можно прямо в JS и написать?
|
Задумка в том, чтобы сервер (железка на микроконтроллере) менял текстовый файл с настройками, а страничка его уже забирала и с согласно настройкам меняла состояние элементов формы, либо, если не получится с отдельным файлом, просто дописывала в конец страницы а не растыкивала элементы по всему html
p.s.: в IE8 заработали оба варианта |
С железкой все понятно. Зачем данные формировать в виде тега, если можно в виде JS-объекта?
|
Может я Вас не так понял, подскажите тогда решение... Суть в следующем, есть коробочка с 4-мя релейными выходами, которая управляется через веб-интерфейс, просто 4 чекбокса стоят, которыми можно включать и выключать реле, но если реле уже включено, на форме нужно, чтобы галочка в соответствующем чекбоксе тоже стояла. Из всех известных мне вариантов передачи информации с сервера на страницу без глобального изменения самого шаблона страницы на сервере, в голову пришел только такой вариант. Скрипт парсит кусок с настройками и соответсвующим образом расставляет галочки... Буду благодарен за любой дельный совет по данному вопросу
|
Вы предлагаете использовать файл со скриптом, в котором просто определить переменные, соответствующие настройкам?
|
Большое спасибо за совет, действительно все оказалось элементарно просто... Идея с парсингом была взята из случая, когда есть массив таких элементов, а у меня один всего, определил переменные во внешнем скрипте и все заработало
|
Я имел в виду, написать вместо
Цитата:
<script type="text/javascript">var settings = {out11: 1, out22: 0};</script> |
возникла еще одна проблема, теперь связанная с обновлением данных. По Вашему совету сделал следующее:
в заголовке html добавил строку <script type="text/javascript" src="files/settings.txt"></script> в файле settings.txt все мои переменные объявлены как глобальные и я с ними нормально работаю, вот его содержимое: var outs = [1,0,1,0]; var uptime = 199141000; var sens = [0,'01:10:34 10.12.2009','05:10:34 10.12.2009',0]; т.е. и sens и outs у меня массивы с четырьмя элементами в каждом. Но появилась необходимость опрашивать значение переменной sens раз в секунду (устройство при изменении состояния просто перезаписывает этот файл настроек, т.е. он может обновляться в процессе работы) Решения, как переинициализировать глобальные переменные раз в секунду без полной перезагрузки страницы я не нашел, поэтому сделал отдельный файл sens.txt в котором содержится следующая запись: [0,'01:10:34 10.12.2009','05:10:34 10.12.2009',0]; и устройство, соответственно, перезаписывает только этот файл sens.txt данный файл я запрашиваю 1 раз в секунду с помощью процедуры XMLHttpRequest, а затем делаю присвоение sens = responseText, но строка возвращается в виде одной стринговой переменной "[0,'01:10:34 10.12.2009','05:10:34 10.12.2009',0]" Можно ли ее как-то обратно преобразовать в массив с четырьмя элементами, или может есть альтернативное решение? |
нашел решение, периодически вызываю следующий скрипт:
var scr = document.createElement('script'); scr.setAttribute('src','files/settings.txt'); document.body.appendChild(scr); при таком подходе дополнительный файл не нужен и вся страница не перегружается, единственное, что смущает - изменяется строка статуса, в ней видно, что каждую секунду идет запрос. Может есть более оптимальное решение? |
Часовой пояс GMT +3, время: 04:28. |