当测试成功时,为什么定义AJAX过程会失败?

当测试成功时,为什么定义AJAX过程会失败?,ajax,Ajax,我正在开发一款基于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.g

我正在开发一款基于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:无法在redterrs=xmldoc.getElementsByTagName'redterrs'[0]上调用null的方法'getElementsByTagName',但当我在Firefox中使用Firebug执行此操作时,它告诉我xmldoc未定义


编辑:如果有人想看到更多内容,项目将位于。

如果您使用的是裸XmlHttpRequest对象,则需要注册onreadystatechange的回调。这将在XHR通过其状态时触发

错误的做法是在回调之外将xmldoc分配给xmlhttp.responseXML


请看一看:

您正在异步获取XML文档,但没有使用事件处理程序来确定何时收到了XML文档。由于您可能应该同步执行此操作,而且更简单,请尝试使用此操作代替第3行:

xmlhttp.open("GET","risk.xml",false);