XML -> JS (массив)
1.
Анатолий (28.03.2010 / 17:59)
Подскажите плиз, как вытянуть данные из файла 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.
Заранее спасибо, если кто укажет на ошибку
2.
Артур (28.03.2010 / 18:35)
Ты вообще что хочешь сделать?
3.
Анатолий (28.03.2010 / 19:01)
Вывести в <SELECT>'е выбраные из БД значения.
На PHP-файл, генерирующий XML передается ID выбраной марки автомобиля,
он по этой марке генерирует все ее модели.
Моя задача: вставить после выбора марки выпадающий список с выбором модели авто
4.
Артур (28.03.2010 / 19:06)
Мне одному кажется что тут бла бла бла? :\
"Вывести в <SELECT>'е выбраные из БД значения" - выбранные кем?
"На PHP-файл, генерирующий XML передается ID выбраной марки автомобиля,
он по этой марке генерирует все ее модели" - ну и прекрасно раз генерирует, при чем тут JS
"вставить после выбора марки выпадающий список с выбором модели авто" - все что ты сказал можно заменить предложением - у меня есть код, хочу добавить кое что к нему, можете это добавить бесплатно? - ???
5.
Анатолий (29.03.2010 / 10:43)
А по моему, ты просто балабол.
http://visavi.net/forum/topic.php?tid=7403&
Ты в 6 посте расшифровал назавние Ajax, хотя, как я понял из темы, ты понятия не имеешь, как оно работает.
Набиваешь посты на форуме - не в моих темах, а если пишешь - то думай что именно.
"Вывести в <SELECT>'е выбраные из БД значения" - выбранные кем?
Выбирает их бабушка-пенсионерка, которую я нанял млин.
Естественно РНР скриптом с помощью
MySQL запроса.
Шел бы ты парень в раздел Общение и не парил людям мозг да и себя не позорил
-----
В коде из всего написаного почемуто не работает
mass_id = xmlDocumentElement.getElementsByTagName('id');
mass_name = xmlDocumentElement.getElementsByTagName('name');
И сколько твой мастерский мозг потребует денег за решение данной задачи?
P.S. Для особо одаренных: не надо копировать весь текст, справа есть ссылка
Цитировать
6.
Артур (29.03.2010 / 11:26)
Мой мастерский мозг подозревает что твой мастерский мозг не знает как работает 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 ??? в большенстве своем оно вообще не работает
7.
Артур (29.03.2010 / 11:34)
Некогда не подозревал что можно пользоваться замечательным свойством тегов - Атрибут - и записать весь файл по типу:
<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>';
Мой мозг возможно не такой гениальный как твой но сейчас я попробую это дело протестировать и найду еще кучу ошибок в твоем коде
8.
Артур (29.03.2010 / 11:41)
Уже одна есть
Если ты знаешь как работает XMLHttpRequest, почему ты не знаешь что его событие onreadystatechange происходжит в четыре этапа:
1 - посылка
2 - обработка
3 - возвращение
4 - получение
И почему ты пе проверяешь какой этап используется:
if (Ajax.readyState == 4)
???
9.
Артур (29.03.2010 / 11:46)
Боже Ш ты мой, что это за пакость:
"mydiv.innerHTML +=" ???
Где применение DOM используемого в AJAX ???
10.
Артур (29.03.2010 / 11:51)
<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>
11.
Артур (29.03.2010 / 11:55)
Возможно у меня не тай уж и мастерский мозг, но моя opera 9.6 говорит что этот код прекрасно работает, а xml под него таков:
<file>
<name id="1">Название 1</name>
<name id="2">Название 2</name>
<name id="3">Название 3</name>
</file>
12.
Артур (29.03.2010 / 11:57)
Так что в следующий раз, маленький гаденышь, внимательно изучай все что входит в состав методов нового для тебя программного продукта
И спасибо за укус в печень - "Ты в 6 посте расшифровал назавние Ajax, хотя, как я понял из темы, ты понятия не имеешь, как оно работает." - помогает не рассла***ся ;)
Удачи
13.
Артур (29.03.2010 / 11:59)
А теперь пару замечаний:
1) Что там у тебя SQL запросом получается? Если ты берешь данные с XML ???
2) На куя тут XML? Подобные данные целесообразнее хранить в БД
3) Для особо одаренных никому не запрещено цитировать так, как ему удобно, а с твоей стороны это - "Для особо одаренных: не надо копировать весь текст, справа есть ссылка Цитировать" - попытка добавить горечи в твой пост, по типу - "у тебя там ошибки орфографические, ты дурак!" - но.. Эти способы говорят о многом
14.
Артур (29.03.2010 / 12:03)
Оу... Чуть не забыл - мой мастерский мозг требует за эту работу 600 р, кошелек скинуть?
15.
Анатолий (29.03.2010 / 20:08)
Цену вперед надо писать
)))
Забирай за такие бабки свой мастерский код назад
Насчет XML, он собественно и генерируется из БД, т.к. получать в среду JS
в виде строчки для меня сложней, +на этом же XML работают еще пара страниц
Насчет взаимных высказываний - сори
но в таком стиле пообщаться я люблю
маленький гаденышь
- ты меня еще в реале не видел
И на последок,
Спасибо, +
16.
Артур (29.03.2010 / 21:26)
;) Удачи
URL:
https://visavi.net/topics/7493