我正在开发一款基于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中收到此错误:“未捕获的TypeError:无法在”redterrs = xmldoc.getElementsByTagName('redterrs')[0]“上调用null的'getElementsByTagName'方法,但是当我这样做时它在Firebug的Firefox中告诉我xmldoc没有定义。
编辑:如果有人想要了解更多内容,项目将在http://code.google.com/p/risk-board-game托管。
答案 0 :(得分:0)
如果您使用裸XmlHttpRequest对象,则需要为onreadystatechange
注册回调。当XHR通过其状态时,这将被解雇。
您所做的错误是在回调之外将xmldoc
分配给xmlhttp.responseXML
。
看看这个:http://ajaxpatterns.org/XMLHttpRequest_Call#Asynchronous_Calls
答案 1 :(得分:0)
您正在异步获取XML文档,但您没有使用事件处理程序来查明何时收到XML文档。既然您可能应该同步执行此操作,并且因为它更简单,请尝试使用此代替第3行:
xmlhttp.open("GET","risk.xml",false);