Кажется, есть несколько вещей, которые вы не совсем делаете прямо здесь:
Во-первых, класс XMLHttpRequest
не имеет свойства responseXML
: это не то, где можно получить результат асинхронного запроса. Вместо этого свойство responseXML
принадлежит отдельным XMLHttpRequest
объектам (или «экземплярам»). Вы создаете новый XMLHttpRequest
экземпляр в переменной xmlhttp
в строке var xmlhttp = new XMLHttpRequest();
, и это будет xmlhttp
, который содержит свойство responseXML
.
Кроме того, вы передаете значение this
в вашем обработчике onreadystatechange
до myFunction
, но myFunction
не принимает никаких аргументов. JavaScript имеет очень слабые ограничения на вызов функций с правильным количеством аргументов: любые избыточные аргументы просто игнорируются.
Попробуйте изменить первую пару строк этой функции с
function myFunction() {
var xmlDoc = XMLHttpRequest.responseXML;
на
function myFunction(result) {
var xmlDoc = result.responseXML;
Это позволяет myFunction
получить экземпляр xmlhttp
и извлечь из него ответ XML.
Во-вторых, в конце написанной вами функции:
document.getElementById("students") = table;
Ваша переменная table
содержит строку HTML, представляющую содержимое таблицы. Однако вы не можете установить элемент в строку HTML. Вместо этого вы хотите присвоить эту строку HTML внутренней HTML этого элемента, используя свойство innerHTML
элемента:
document.getElementById("students").innerHTML = table;
Наконец, документ XML Вы включаете в свой вопрос неправильную форму, поскольку атрибут ID
элемента root использует умные кавычки (”
) для окружения значения, когда вместо него следует использовать нейтральные кавычки ("
). Если XML не правильно сформирован, свойство responseXML
result
будет null
.
Я внес эти изменения в ваш код, и это сработало, так как я мог загрузить XML и заполнить таблицу данными из файла XML.