2011-08-13 149 views

回答

3

服务器上的XML文档没有使用内容类型text/xml,因此XmlHttpRequest对象没有将响应视为XML,这意味着responseXML属性未被设置。请注意,responseText属性包含XML文本。

修复HTTP服务器返回正确的内容类型。

+0

或者,如果无法修复服务器,则覆盖XMLHttpRequest对象以强制它被解析为XML。 – jfriend00

+0

覆盖MIME类型似乎解决了它。谈到下一个问题。谢谢! – jlowgren

0

这使得我看到的AJAX请求很好。据我估计,你的问题是这些行:

var xmldoc = req.responseXML; 
    var mapwidth = xmldoc.documentElement.getAttribute("width"); 

xmlDoc中为空,因此它抛出以下错误:

game.js:22 
Uncaught TypeError: Cannot read property 'documentElement' of null 

,我也很好奇,为什么你要通过努力无论如何,当你已经加载jQuery的时候手动制作你自己的XMLHttpRequest对象。为什么不使用jQuery.ajax?您可以将参数设置为包含dataTypexml,即使您没有正确设置HTTP标头,也可能会强制它解析它。

+0

基本上我只是寻找尽可能少的开销,我只是使用jQuery美学。但我会放弃它,谢谢! – jlowgren

+0

考虑到一些浏览器以不同的方式实现XHR,似乎支付不仅跨浏览器兼容性,而且可读和可维护代码的成本相当低。 – Chris

0

您是否正在用您最喜欢的浏览器观看javascript错误?我在game.js的第22行看到一个错误,看起来像是因为你的responseXML不是你期望的那样,因此xmldoc没有按照你想要的方式进行初始化。破解打开一个调试器(Chrome检查器或Firefox中的Firebug),看看自己的失败。如果是我,我会在game.js的第21行设置一个断点,然后查看req对象,查看它告诉我的最后一个事务(错误,其他数据等)。

查看responseXML here on Mozilla's reference的降解处理。可能的原因为空responseXML是服务器不应用text/xml Content-Type标头或XML解析错误。如果你的服务器没有设置正确的MIME类型,你可以用overrideMimeType()强制它解析为XML。

+0

脚本等待,因为XMLHttpRequest open()函数被设置为同步工作:'open(“GET”,“maps/testmap.tmx”,false);'(第三个参数) – stewe

+0

啊,好的。不期待同步的ajax调用,因为它们对用户不友好。然后,问题是您的xmldoc为空。你应该在第21行设置一个断点,看看responseXML是什么。 – jfriend00

+0

我都没有,只是想让你知道。顺便说一句。 cdhowie的答案是正确的,这就是为什么'responseXML'没有被定义。 – stewe

相关问题