• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AjaxでDOM Exception11が出る)

AjaxでDOM Exception11が出る

このQ&Aのポイント
  • 次のようなスクリプトを実行して、隣のディレクトリに配置したxmlをAjaxで取得しようとしています。
  • ブラウザのコンソールで"INVALID_STATE_ERR: DOM EXCEPTION 11"と出て止まってしまいます。
  • これはxmlファイルにアクセス出来ない(見つからない等)ことを意味しているのでしょうか?それともコードそのものに何か欠陥があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.2

#1 です。 - HTTPを模倣する実装があるかもしれませんし、ないかもしれません。あくまで可能性の話です。 でも、Content-Type とかどうするんでしょうね…。 file:///C:/hoge.xml は text/xml を返すべきなのか、application/xml を返すべきなのか。 - file:/// でスクリプトを実行する場合は http:// とはやや異なる振る舞いをするという話は IE に限らずよく聞きます。(IE でクロスドメイン制限がなくなっていたような) - file:/// は仕様にないことから今後に渡ってサポートされる保証はありません。 「IE9 まで使えたがIE10 から使えなくなった」「Fx5 と Fx6 で振る舞いが違う」というようなことが起こっても文句はいえません。 つまり、「あるブラウザのあるバージョンでは動作する」ということしか保証できないってことです。 MSはMSDNという技術情報を用意してくれていますが、http://msdn.microsoft.com/en-us/library/ms535874%28v=vs.85%29.aspx に書かれていない部分もあるバージョンで突然変化する可能性があります。(file:/// は記載がないので保証がないってことですね) - ついでにクロスドメイン制限もあってややこしい感じです。 /** * @url http://127.0.0.1/index.html */ var xhr = new XMLHttpRequest; xhr.open('GET', 'file:///C:/sample.txt', true); // 異なるドメインなのでリクエストできない (XMLHttpRequest Level 2 で可能な仕組みができましたが、余談なので省略) 逆もまた然り。 常に同一ドメインにリクエストするわけですから、相対URIを使う限りは起こりえない問題なんですけどね。

neglectiii
質問者

お礼

詳細な説明ありがとうございます。 Ajaxリクエストについてはできました。URLのマッピングがうまくいっていなかったようです; >- file:/// は仕様にないことから今後に渡ってサポートされる保証はありません。 >「IE9 まで使えたがIE10 から使えなくなった」「Fx5 と Fx6 で振る舞いが違う」と>いうようなことが起こっても文句はいえません。 >つまり、「あるブラウザのあるバージョンでは動作する」ということしか保証でき>ないってことです。 そうなんですね。file:///へのリクエストが色々と挙動不安定なことが分かりました。 ということはHTTP通信のテストはローカル内で行わない方が無難ということですよね。

その他の回答 (1)

  • think49
  • ベストアンサー率59% (285/482)
回答No.1

とりあえず、send() は第一引数しかないです。 http://www.w3.org/TR/XMLHttpRequest/#the-send-method 現象を再現可能な最小限のコードがあれば検証できるかもしれません。 > そもそもローカルだからAjaxのリクエストが出来ないのだろうかという点も疑問です。 file:/// はhttpプロトコルではないですが、httpプロトコルを何が解釈してどうやってレスポンスを得る動作を想定しておられますか? ブラウザがhttpプロトコルを解釈するWebサーバを模倣して返すべきでしょうか? IE に限らず、file:/// に XMLHttpRequest を発行した場合の挙動は実装依存ですよ。

neglectiii
質問者

お礼

ありがとうございます。 >とりあえず、send() は第一引数しかないです。 open()の間違いだったかも知れません。勉強しなおします。 open()でやってみたらエラーは消えて一応動きましたが、コンソールを見る限り中身はとれてないようでした(調べて分かったんですが、GAEではAjaxリクエストはクライアントからのHTTPリクエストと解釈され、サーバ側で受け取るpythonのハンドラでURLをマッピングする必要があるということでした) >file:/// はhttpプロトコルではないですが、httpプロトコルを何が解釈してどうやってレスポンスを得る動作を想定しておられますか? ブラウザがhttpプロトコルを解釈するWebサーバを模倣して返すべきでしょうか? 質問を完全に理解する知識がないので答えにならないかもしれませんが、webサーバを模倣し、まるでオンライン上でサーバにリクエストを送り、サーバがxmlのデータをAjaxレスポンスに返し、そのxmlをクライアントでパースして格納させることを想定しています。 >IE に限らず、file:/// に XMLHttpRequest を発行した場合の挙動は実装依存ですよ。 ということは実装によっては上記のようなことは可能ということでしょうか?

関連するQ&A