为什么在测试成功时定义AJAX流程失败?

时间:2011-06-08 19:18:21

标签: 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.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托管。

2 个答案:

答案 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);