2011-08-13 184 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

相關問題