简而言之,我有一个本地运行正常的项目,但是一旦上传到我的服务器,我的一个XMLHttpRequest就会失败。被加载的XML(在这种情况下为.tmx)文件的相对路径绝对正确。任何帮助解决这个问题将不胜感激。XMLHttpRequest在本地工作,但不在服务器上
该项目的位置是www.jorum.se/fancypants/,并在game.js(第22行)有问题的代码。
简而言之,我有一个本地运行正常的项目,但是一旦上传到我的服务器,我的一个XMLHttpRequest就会失败。被加载的XML(在这种情况下为.tmx)文件的相对路径绝对正确。任何帮助解决这个问题将不胜感激。XMLHttpRequest在本地工作,但不在服务器上
该项目的位置是www.jorum.se/fancypants/,并在game.js(第22行)有问题的代码。
服务器上的XML文档没有使用内容类型text/xml
,因此XmlHttpRequest对象没有将响应视为XML,这意味着responseXML
属性未被设置。请注意,responseText
属性包含XML文本。
修复HTTP服务器返回正确的内容类型。
这使得我看到的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?您可以将参数设置为包含dataType
的xml
,即使您没有正确设置HTTP标头,也可能会强制它解析它。
您是否正在用您最喜欢的浏览器观看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。
或者,如果无法修复服务器,则覆盖XMLHttpRequest对象以强制它被解析为XML。 – jfriend00
覆盖MIME类型似乎解决了它。谈到下一个问题。谢谢! – jlowgren