Почему определение процесса AJAX завершается неудачно, когда тесты успешны? - PullRequest
0 голосов
/ 08 июня 2011

Я разрабатываю игру в стиле риска на основе AJAX, и соавтор (который с тех пор ушел) написал этот код:

function init() {
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","risk.xml",true);
xmlhttp.send(null);
xmldoc=xmlhttp.responseXML;
[snip]
document.getElementById('player').value='red'
[snip]
redterrs=xmldoc.getElementsByTagName('redterrs')[0]
blueterrs=xmldoc.getElementsByTagName('blueterrs')[0]
purpleterrs=xmldoc.getElementsByTagName('purpleterrs')[0]
greenterrs=xmldoc.getElementsByTagName('greenterrs')[0]

Когда я пытаюсь выполнить это, я получаю эту ошибку в WebKit: "Uncaught TypeError: Невозможно вызвать метод 'getElementsByTagName' из null" для "redterrs = xmldoc.getElementsByTagName ('redterrs') [0]", но когда я это делаю в Firefox с Firebug он говорит, что xmldoc не определен.

Редактировать: В случае, если кто-то хочет увидеть больше этого, проект размещен на http://code.google.com/p/risk-board-game.

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Вы получаете документ XML асинхронно, но вы не используете обработчик событий, чтобы узнать, когда документ XML был получен. Поскольку вы, вероятно, должны делать это синхронно, и поскольку это намного проще, попробуйте это вместо строки 3:

xmlhttp.open("GET","risk.xml",false);
0 голосов
/ 08 июня 2011

если вы используете голый объект XmlHttpRequest, вам нужно зарегистрировать обратный вызов для onreadystatechange.Это будет запущено, когда XHR пройдет через свои состояния.

То, что вы делаете неправильно, присваивает xmldoc xmlhttp.responseXML вне функции обратного вызова.

Посмотрите на это: http://ajaxpatterns.org/XMLHttpRequest_Call#Asynchronous_Calls

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