XML -> JS (массив)

Печать RSS
142

А
Автор
Пацак
0
Подскажите плиз, как вытянуть данные из файла XML
пример:
<file>
  <id>1</id>
  <name>Название 1</name>
  <id>2</id>
  <name>Название 2</name>
  <id>3</id>
  <name>Название 3</name>
</file>
в среду javascript
Вот сам javascript:
var req='';
function loadXMLDoc(url) {
    try{
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange();
        req.open("GET", url, true);
        req.send(null);
    }catch(e){
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange();
            req.open("GET", url, true);
            req.send();
        }
    }
}
function processReqChange() {
	var mydiv = document.getElementById('selectMark');
	mydiv.innerHTML='<select name="mark" id="mark">';
	
	var xmlDocumentElement = req.responseXML.documentElement;
	mass_id = xmlDocumentElement.getElementsByTagName('id');
	mass_name = xmlDocumentElement.getElementsByTagName('name');
	for (var I = 0 ; I < mass_id.length ; I++) {
	mydiv.innerHTML +='<option value="'+mass_id[I].firstChild.data+'">' +mass_name[I].firstChild.data+'</option>' ;
	}
	mydiv.innerHTML+='</select>';
}
XML возвращает результат, но он не поступает в обработку JS.
Заранее спасибо, если кто укажет на ошибку
Изменил: Анатолий (28.03.2010 / 18:00)
А

Оранжевые штаны
0
Ты вообще что хочешь сделать?
А
Автор
Пацак
0
Вывести в <SELECT>'е выбраные из БД значения.
На PHP-файл, генерирующий XML передается ID выбраной марки автомобиля,
он по этой марке генерирует все ее модели.
Моя задача: вставить после выбора марки выпадающий список с выбором модели авто
А

Оранжевые штаны
0
Мне одному кажется что тут бла бла бла? :\
"Вывести в <SELECT>'е выбраные из БД значения" - выбранные кем?
"На PHP-файл, генерирующий XML передается ID выбраной марки автомобиля,
он по этой марке генерирует все ее модели" - ну и прекрасно раз генерирует, при чем тут JS
"вставить после выбора марки выпадающий список с выбором модели авто" - все что ты сказал можно заменить предложением - у меня есть код, хочу добавить кое что к нему, можете это добавить бесплатно? - ???
А
Автор
Пацак
0
А по моему, ты просто балабол.
http://visavi.net/forum/topic.php?tid=7403&
Ты в 6 посте расшифровал назавние Ajax, хотя, как я понял из темы, ты понятия не имеешь, как оно работает.
Набиваешь посты на форуме - не в моих темах, а если пишешь - то думай что именно.

"Вывести в <SELECT>'е выбраные из БД значения" - выбранные кем?
Выбирает их бабушка-пенсионерка, которую я нанял млин.
Естественно РНР скриптом с помощью MySQL запроса.
Шел бы ты парень в раздел Общение и не парил людям мозг да и себя не позорил
-----
В коде из всего написаного почемуто не работает
    mass_id = xmlDocumentElement.getElementsByTagName('id'); 
    mass_name = xmlDocumentElement.getElementsByTagName('name');
И сколько твой мастерский мозг потребует денег за решение данной задачи?
P.S. Для особо одаренных: не надо копировать весь текст, справа есть ссылка
Цитировать
Изменил: Анатолий (29.03.2010 / 10:48)
А

Оранжевые штаны
0
D
Мой мастерский мозг подозревает что твой мастерский мозг не знает как работает DOM, а точнее:
<file> 
  <id>1</id> 
  <name>Название 1</name> 
  <id>2</id> 
  <name>Название 2</name> 
  <id>3</id> 
  <name>Название 3</name> 
</file>
Как ты обращаешься к NodeList - mass_name[I] - это корректно ???
Что еще за обращение к первому узлу за #text firstChild.data ??? в большенстве своем оно вообще не работает
Изменил: Артур (29.03.2010 / 11:29)
А

Оранжевые штаны
0
Некогда не подозревал что можно пользоваться замечательным свойством тегов - Атрибут - и записать весь файл по типу:
  <name id="1">Название 1</name>   
  <name id="2">Название 2</name>    
  <name id="3">Название 3</name>  
</file>
А затем выбирать все становится проще простого:
 var xml = req.responseXML.documentElement;  
 var aName = xml.getElementsByTagName('name'); 
    for (var i = 0 ; i < aName.length ; i++) { 
    mydiv.innerHTML +='<option value="'+aName.item(i).getAttribute('id')+'">' +aName.item(i).firstChild.data+'</option>' ; 
    } 
    mydiv.innerHTML+='</select>';
Мой мозг возможно не такой гениальный как твой но сейчас я попробую это дело протестировать и найду еще кучу ошибок в твоем коде smile
А

Оранжевые штаны
0
Уже одна есть
Если ты знаешь как работает XMLHttpRequest, почему ты не знаешь что его событие onreadystatechange происходжит в четыре этапа:
1 - посылка
2 - обработка
3 - возвращение
4 - получение
И почему ты пе проверяешь какой этап используется:
if (Ajax.readyState == 4)
???
А

Оранжевые штаны
0
Боже Ш ты мой, что это за пакость:
"mydiv.innerHTML +=" ???
Где применение DOM используемого в AJAX ???
А

Оранжевые штаны
0
<html>
<body>
<script>
function loadXMLDoc(url){ 
  var req = new XMLHttpRequest();  
  req.open("GET", url, true); 
  req.send(null); 
  req.onreadystatechange  = function(){
    if (req.readyState == 4){  // Запрос возвращен
      var mydiv = document.createElement('select');  
      // Создаем узел select
      var xml = req.responseXML.documentElement;
      
      var aName = xml.getElementsByTagName('name');  
      for (var i = 0 ; i < aName.length ; i++) { 
        var sData =  aName.item(i).firstChild.data;
        var sId =  aName.item(i).getAttribute('id');
        var noOption =  document.createElement('option'); 
        noOption.setAttribute('value', sId);
        noOption.innerText = sData;
        mydiv.appendChild(noOption);
        // набиваем узел select полученными узлами option
      }  
      document.getElementsByTagName('body').item(0).appendChild(mydiv);
      //так как AJAX асенхронен, придется вставлять полученное прямо в функции обработки ответа
      
      }
    }
} 
loadXMLDoc('q.xml');
</script>
</body>
</html>
Изменил: Артур (29.03.2010 / 11:54)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск