2013-06-10 3 views
2

Я работаю над небольшой идеей веб-сайта, и я не очень хорош в этом. У меня в основном есть викторина HTML, которая подскажет пользователю вопросы, которые я определил в XML.XML, Javascript - Невозможно вызвать метод getElementsByTagName of null

window.onload = function xml() 
{ 
    // get form from HTML 
    var form = document.getElementById("form"); 

    // get XML document 
    if (window.XMLHttpRequest) 
    { 
      var xmlhttp = new XMLHttpRequest(); 
    } 

    // open XML 
    xmlhttp.open("GET", "questions.xml", false); 
    xmlhttp.send(null); 

    // initialize elements for do document, questions, and details 
    var xmlDoc = xmlhttp.responseXML; 
    var question = xmlDoc.getElementsByTagName("question"); 

На линии выше, я получаю сообщение об ошибке сказав «не удается вызвать метод„getElementsByTagName“нуль». Странная вещь, однако, заключается в том, что я получаю указанную ошибку только в том случае, если XML-файл имеет несколько тегов «вопроса». Если в моем XML есть только один тег «вопрос», вся функция работает отлично. Поэтому мне интересно, что происходит в этом случае, и почему это не сработает для меня.

(остальная часть кода ниже показывает, где я начинаю идти с функцией)

var qXML = xmlDoc.getElementsByTagName("q"); 

    // write values into HTML for each question 
    for (i = 0 ; i < question.length ; i++) 
    { 
     // qBlock div for question 
     var div = document.createElement('div'); 
     div.className = "qBlock"; 

Этот код продолжается некоторое время, чтобы получить все поля в HTML. В общем, этот блок кода в цикле работает повсюду, если только не существует нескольких элементов вопроса.

Огромное спасибо всем, кто может помочь/научить меня никому из этого. Также не стесняйтесь говорить мне, если я делаю что-либо еще неправильно. Я открыт для любой критики.

+1

Как выглядит ваш файл 'questions.xml'? – icktoofay

+0

Сообщает вам, что * xmlDoc * имеет значение * null *, которое возвращается, если запрос не завершен или не выполнен успешно. Проверьте ответ перед вызовом * getElementsByTagName *. Код в части «остальной части кода» выглядит сломанным, он использует тег * q *, присваивает * qXML *, затем выполняет итерацию по * вопросу *. – RobG

ответ

2

Хотя я не могу быть уверен, что это проблема, не видя ваш файл questions.xml, у вас может быть несколько корневых элементов. Например:

<?xml version="1.0"?> 
<question>...</question> 
<question>...</question> 

XML не позволяет этого, и он не сможет проанализировать. Заверните их в один корневой элемент:

<?xml version="1.0"?> 
<questions> 
    <question>...</question> 
    <question>...</question> 
</questions> 
+0

Большое вам спасибо. Я не могу поверить, что вы ответили на этот вопрос, даже не увидев мой XML. Прошу прощения за то, что я забыл показать это, и еще раз спасибо за то, что вы так помогли. Ты великолепен. – mvarble

Смежные вопросы