прочитать XML в Javascript проблема - PullRequest
1 голос
/ 15 мая 2010

хай всего,

У меня проблема с моим кодом для чтения xml. Я использую ajax для чтения XML-данных и заполнения их в выпадающем списке. Моя проблема в том, что он читает только первые данные. Вот мой код

мой xml вот так

 <info>
 <area>
        <code>1</code>
        <name>area1</name>
 </area>
  <area>
         <code>2</code>
         <name>area2</name>
  </area>
  </info>

и мой JavaScript

 if(http.readyState == 4 && http.status == 200) {
   //get select elements
   var item = document.ProblemMaintenanceForm.elements["probArea"];
   //empty combobox
   item.options.length = 0;
   //read xml data from action file
   var test = http.responseXML.getElementsByTagName("area");
   alert(test.length);
   for ( var i=0; i < test.length; i++ ){
          var tests = test[i];
          item.options[item.options.length] = new Option(tests.getElementsByTagName("name")[i].childNodes[0].nodeValue,tests.getElementsByTagName("code")[i].childNodes[0].nodeValue);


                             }


                     }

Ответы [ 2 ]

0 голосов
/ 15 мая 2010

Вам не нужно индексировать его дважды. Просто измените эту строку на:

item.options[item.options.length] = new Option(
    tests.getElementsByTagName("name")[0].childNodes[0].nodeValue,
    tests.getElementsByTagName("code")[0].childNodes[0].nodeValue
);

Итак, для ясности приведенный выше блок кода должен выглядеть так:

if(http.readyState == 4 && http.status == 200) {
  //get select elements
  var item = document.ProblemMaintenanceForm.elements["probArea"];
  //empty combobox
  item.options.length = 0;
  //read xml data from action file
  var test = http.responseXML.getElementsByTagName("area");
  alert(test.length);
  for ( var i=0; i < test.length; i++ ){
    var tests = test[i];
    item.options[item.options.length] = new Option(
        tests.getElementsByTagName("name")[0].childNodes[0].nodeValue,
        tests.getElementsByTagName("code")[0].childNodes[0].nodeValue
    );
  }
}
0 голосов
/ 15 мая 2010

Вам нужно использовать другой цикл или фиксированный индекс вместо повторного использования индекса цикла (например, ...("name")[i]) в следующей строке:

    item.options[item.options.length] = new Option(
        tests.getElementsByTagName("name")[i].childNodes[0].nodeValue,
        tests.getElementsByTagName("code")[i].childNodes[0].nodeValue
    );

Вы перебираете узлы элементов, используя var i, который, очевидно, будет увеличиваться на единицу каждый экземпляр цикла. Теперь, если вы проанализируете какой-либо элемент на i > 0, вы не сможете получить доступ к тегу name, поскольку его нет (по крайней мере, в вашем примере xml).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...