Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удается разобрать документ XML, Получить значения из XML, создать списки 
:(
    Опции темы
KonstRuctor
Дата 21.6.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Привет всем!
Задача - по выбору первого селекта данные попадают в два независимых друг от друга селекта.
html-код выглядит так:
Код

<form id="f1" action="{$_SERVER["PHP_SELF"]}">
<fieldset>
<select id="material" name="material" onchange="getMassa(this.value);">
<option value="1">Брезент</option>
<option value="2">Хлопок</option>
<option value="3">Лен</option>
<option value="4">Джинса</option>
<option value="5">Вельвет</option>
</select>

<select id="massa" name="massa">
<option value="0">---</option>
</select>

<select id="width" name="width">
<option value="0">---</option>
</select>
</fieldset>
</form>

Функция getMassa обращается в php-файл, который отдает ей вот такой XML:
Код

<response>
  <material>
   <vid>massa</vid>
   <options>
     <option value="0">---</option>
     <option value="2">180</option>
  </options>
 </material>
 <material>
  <vid>width</vid>
  <options>
   <option value="0">---</option>
   <option value="2">160x480</option>
   <option value="7">180x400</option>
   <option value="8">980x1204</option>
  </options>
 </material>
</response>

Далее я принимаю этот XML и пытаюсь разобрать его, чтобы построить два списка: масса и ширина.
Эти списки, повторюсь, никак не связаны между собой, а зависят только от материала.
Вот мой код:
Код

if (request.readyState == 4)
{
    if (request.status == 200)
    {
      var responseXml = request.responseXML;
      var xmlDoc = responseXml.documentElement;
      var material = xmlDoc.getElementsByTagName("material");
      for (var i=0; i<material.length; i++)
      {
        for (var j=0; j<material[i].childNodes.length; j++)
        {
            var vid = material[i].childNodes[j].firstChild.nodeValue;
            if (vid == "massa" )
            {
                _select = document.getElementById("massa");
                options = xmlDoc.getElementsByTagName("option");
                for (var i=0; i<options.length; i++) {
                var value = options[i].getAttribute("value");
                var text = options[i].firstChild.data;
                var option = document.createElement("option");
                var optionText = document.createTextNode(text);
                option.appendChild(optionText);
                option.setAttribute("value", value);
                _select.appendChild(option);
                }
            }
            else if ( vid == "width" )
            {
                _select = document.getElementById("width");
                options = xmlDoc.getElementsByTagName("option");
                for (var i=0; i<options.length; i++) {
                var value = options[i].getAttribute("value");
                var text = options[i].firstChild.data;
                var option = document.createElement("option");
                var optionText = document.createTextNode(text);
                option.appendChild(optionText);
                option.setAttribute("value", value);
                _select.appendChild(option);
                }
            }
        }
      }
    }
}

Получается такая картина: все данные попадают в список "massa", а не разбираются по двум разным спискам.
Запутался я что-то. Нужна помощь. Спасибо!
PM MAIL WWW ICQ   Вверх
KonstRuctor
Дата 21.6.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Дополнение.
Задачу решил таким образом:
1) Разбил запрос на две части: сперва из javascript послал запрос в php на построение 1-го селекта,
послав заодно новый параметр vid:
Код

url = "getMassa.php?material=" + ctg + "&vid=massa";
    createRequest();
    request.open("GET", url, true);
    request.onreadystatechange = getMassa2;
    request.send(null);

Затем, получив из php простой xml следующего вида:
Код

<response>
<ctg>3</ctg>
<options>
<option value="3">260</option>
<option value="58">300</option>
</options>
</response>

Построил первый селект стандартным способом и тут же послал данные в другой php-скрипт,
уже с другом параметром vid
Код

url = "getMassa.php?material=" + ctg + "&vid=width";

и, прочитав XML-данные, построил второй селект.
УФФФ. Все получилось, программа работает как надо. 
Вопрос: может быть, все можно сделать как-то красивее?
Спасибо!

Это сообщение отредактировал(а) KonstRuctor - 21.6.2009, 20:25
PM MAIL WWW ICQ   Вверх
An6rey
Дата 21.6.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 13.10.2008

Репутация: 3
Всего: 5



 options = xmlDoc.getElementsByTagName("option");
замени на
 options = material[j]..getElementsByTagName("option");

кроме того рекомендовал юы использовать вместо nodeValue - data
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.