2011-08-13 20 views
1

要するに、ローカルで正常に動作するプロジェクトがありますが、一度サーバーにアップロードすると、私の1つのXMLHttpRequestは悲惨に失敗します。ロードされているXMLファイル(この場合は.tmx)への相対パスは間違いなく正しいです。この問題を解決するための援助は、大いに感謝します。XMLHttpRequestはローカルでは動作しますが、サーバー上にはありません

プロジェクトの場所はwww.jorum.se/fancypants/で、問題のコードはgame.js(22行目)です。

答えて

3

サーバ上のXML文書はtext/xmlコンテンツタイプと配信されていないので、XMLHttpRequestオブジェクトは、responseXMLプロパティが設定されていないことを意味するXMLとしての応答を、治療されていません。 responseTextプロパティにXMLテキストが含まれていることに注意してください。

HTTPサーバーが正しいコンテンツタイプを返すように修正しました。

+0

また、サーバーを修正できない場合は、XMLHttpRequestオブジェクトをオーバーライドして強制的にXMLとして解析します。 – jfriend00

+0

mime型をオーバーライドして修正したようです。次の問題へ。ありがとうございました! – jlowgren

0

これは、私が見ているものからAJAXリクエストをうまく作成しています。私の推測航法によって、あなたの問題は、これらの線です:私はまた、あなたが努力を通過している理由として興味

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

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

XMLDOCは、このように、それは次のエラーを投げ、nullですとにかく既にjQueryをロードしているときには、自分のXMLHttpRequestオブジェクトを手動で作成する必要があります。なぜjQuery.ajaxを使用しないのですか? dataTypexmlを含めるようにパラメータを設定すると、HTTPヘッダーを適切に設定していない場合でも解析することができます。

+0

基本的に私は可能な限りオーバーヘッドを探していますが、私はjQueryを美学に使っていました。しかし、私はそれを行く、ありがとう! – jlowgren

+0

一部のブラウザではXHRの実装方法が異なっているため、ブラウザ間の互換性だけでなく、読み取り可能で保守可能なコードに対しても安い費用がかかるようです。 – Chris

0

お気に入りのブラウザでJavaScriptエラーが発生しましたか? game.jsの22行目のエラーが表示されます。これは、あなたのresponseXMLがあなたが期待していたものではないため、xmldocがあなたが望むように初期化されていないためです。クラックを開いてデバッガ(FirefoxのChromeインスペクタまたはFirebug)を開き、何が失敗しているかを確認します。それが私だったら、game.jsの21行目にブレークポイントを設定し、reqオブジェクトを見て最後のトランザクション(エラー、その他のデータなど)について教えてください。

responseXML here on Mozilla's referenceの説明を参照してください。考えられる理由は、responseXMLです。サーバーは、text/xml Content-TypeヘッダーまたはXML解析エラーを適用しません。サーバーが適切なMIMEタイプを設定していない場合は、XMLとしてoverrideMimeType()を使用して解析することができます。

+0

XMLHttpRequestのopen()関数が同期的に動作するように設定されているため、スクリプトは待機します: 'open(" GET "、" maps/testmap.tmx "、false);'(3番目のパラメータ) – stewe

+0

ああ、OKです。同期的なajax呼び出しは、ユーザーにはあまり役に立たないので、期待していませんでした。次に、xmldocがnullであるという問題があります。 21行目にブレークポイントを設定し、responseXMLの内容を確認する必要があります。 – jfriend00

+0

私も、ちょうどあなたに知らせたいと思いました。 Btw。 cdhowieの答えが正しいので、 'responseXML'が定義されていません。 – stewe

関連する問題