AjaxでDOM Exception11が出る

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

AjaxでDOM Exception11が出る

次のようなスクリプトを実行して、隣のディレクトリに配置したxmlをAjaxで取得しようとしています。 var ajaxReq = new XMLHTTPRequest; function loadContents(){ //Ajaxリクエスト ajaxReq.send("GET","xml/contents.xml",handleRequest); //## } が、ブラウザのコンソールで##の行で"INVALID_STATE_ERR: DOM EXCEPTION 11" と出て止まってしまいます。 調べると、利用出来ないオブジェクトにアクセスしようとしている時に出るようなのですが、 これはxmlファイルにアクセス出来ない(見つからない等)ことを意味しているのでしょうか? それともコードそのものに何か欠陥があるのでしょうか? これはGoogle App Engine for Pythonのローカルサーバー上で動かしているのですが、 試しに純粋なローカル環境で試すとfirefoxのコンソールには uncaught exception: [Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: file:///Users/user/gek/s100/HTTP.js :: loadContents :: line 23" data: no] と出ます。これについてはそもそもローカルだからAjaxのリクエストが出来ないのだろうかという点も疑問です。

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

  • ベストアンサー
  • 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

  • onsubmitイベントにfalseを返してもsubmitする

    以下のようなコードでフォームを制御したいのですが、戻り値にfalseを返しているのにフォーム送信されてしまいます。 chekData はDB(mysql)にアクセスして重複チェックするだけのものです。 firefoxのエラーコンソールでは以下のようなエラーを出しますが意味がよくわかりません。 エラー: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://192.168.49.128/js/scripts.js :: anonymous :: line 52" data: no] ソースファイル: http://192.168.49.128/js/scripts.js 行: 52 ---------------------- Javascript ----------------------------- function checkData(vender) { ajax.open("GET", "chkDvl.php?dvl=" + encodeURI(vender),true); ajax.onreadystatechange = function() { <<<< 問題の52行目 if (ajax.readyState == 4 && ajax.status == 200) { var res = decodeURI(ajax.responseText); if (res != 0) { window.alert(vender + " " + res + "は既に登録済です"); return false; }else{ return true; } } } ajax.send(null); } ----------------------------- HTML --------------------------- <form action="test.php" method="post" onsubmit="return checkData(this.dvl.value)"> <input name="dvl" type="text" /> <input name="button" type="submit" value="送信" /> </form> ちなみに別のソースの非同期通信を使用しないものはsubmitの制御はできています。 よろしくお願いいたします。

  • firefox 起動時に不明なウィンドウが出ます 

    firefox 起動時に不明なウィンドウが出ます  Japanize: [Exception... "Component returned failure code: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [nsIXMLHttpRequest.send]" nsresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)" このようなウインドウがあがります、何故こうなるのでしょうか?

  • Node.jsでajaxがうまくいかない

    nodejs初心者なのでよくわからずやっていて恐縮ですが、うまくいきません。 https://phpotameshi-hoto345.c9users.io/node-ajax/hello_ajax.html なのですがもともとはphpで送信ボタンを押したときにphpが実行されるものでしたが、これを少し改良してNode.jsでやってみようと思ったのですが、phpと違って <script src="scripts/hello.js"></script> のようにnodejsを読み込んでやれば同じ結果になると思ったのですがうまくいきません。 その前にローカルでもNode.jsは使えるようなので >node test.js Server running at http://localhost:8124/ のようにしてローカルでやってもhttp://localhost:8124/自体は問題なく立ち上がりtest.jsの中身は実行されたのですが、ajaxの方がうまくいきません。 ローカルでのNode.jsもServer running at http://localhost:8124/ となっていればNode.jsのサーバは起動しているので、 ローカルでhello_ajax.htmlを起動して、buttonを押せばajaxもnodejsも実行されるのではないでしょうか?

  • ajax googlmap

    お世話になります。googlemapについての質問です。 現在、「Googleマップ+Ajaxで自分の地図を作る本」という書籍を読んでgooglemapを使用したサイトの構築を行っております。 書籍のサンプルコードをローカルのブラウザで開いた際、firefox(ver3.0.4)ではmapが表示されますが、IE(ver6.0.2900.2180)では 表示されません。サンプルコードの内容を一部記載しますと、 var request = GXmlHttp.create(); request.open("GET", "places.xml", true); request.send(null); request.onreadystatechange = function() { if (request.readyState == 4) { となっており、以下xmlファイルの座標データをmapに反映させる処理が続くのですが、IEでは "if (request.readyState == 4) {" の分岐に入っていないようです。 書籍中には、IE6で動作確認済みとあります。出版元に質問したのですが、返事がありません。お分かりの方いらっしゃいましたらよろしくお願い致します。

    • ベストアンサー
    • HTML
  • JQueryはAJAXとは無関係??

    質問◆JQueryおよびJQueryMobileは「AJAX」とは無関係なのでしょうか? 「JQueryMobileを使っているとき、DOMによってHTMLを動的に差し替えている」という認識なのですが、 特にRequest関連の記載をJavaScriptで記載していない限り、AJAXの処理は行われないのでしょうか? それとも、 JQuery Mobileを使っている場合は、ページ遷移などで、プログラマが意識していなくても(独自にプログラムを書いていなくても) AJAXの処理が行われているのでしょうか? /************************************/ サーバへのリクエストはなくても、1つのマシン内の、HTMLファイルとHTMLファイルの間で、 HTTPで通信がされるということはないと思っています。 (※基本、HTTPはクライアントとサーバの間のときしか使われないのですよね?) JQueryの技術情報のサイトを見ていると、 よく「document.ready」と書かれていたりするソースを見かけますが、 これはAjaxとは関係なく(通信とは関係なく)、 また「xhr.send」も書かれていないHTMLは、AJAXは使われないという理解です。 (「Form、submit」とも関係がない) XMLHttpRequestも「HttpRequest」とあるわけですし、 「Form、submit」を書いているときに行われるわけではないけれども、かわりに、 「xhr.send」とJavaScriptで実行されたタイミングで走る処理であり、 その際、「サーバから返される情報がXMLのデータ形式で(XML以外もですが、、)」だという理解なのですが、合っていますでしょうか?

    • ベストアンサー
    • AJAX
  • Ajax.RequestでのPHP通信について

    new Ajax.Request を利用してちょっとしたメール送信フォームを作っています。 一通り完成はしたのですが、PHP側での未入力チェック後、jsでの受け取り方が分からず困っています。 ----- <javascript ソース> function postData() {  new Ajax.Request(   "send.php", {    method: "post",    parameters: Form.serialize("myform"),    onComplete: onCompleteHandler   }  ); } function onCompleteHandler(request) {  // ここでPHP側から未記入チェックを受信したい } <PHP ソース> // 必須項目チェック if( $formValue1 == "" || $formValue2 == "" ) {  // ここから未記入を通知したい } ----- このようにPHP側で記入チェックし、それをjs側で受けとる方法が分からず困っています。 すみませんがどなたか教えていただけると助かります。

  • firefoxのFEBEのエラー

    FEBEで拡張機能をバックアップしようとするとerrorが出ます。 ブックマークと設定だけならできるので拡張機能になにか問題があるのかなと思います。エラー無視で進めると一部の拡張機能が見つかりませんというメッセージが出ます。FEBEにはこういったことがよくあるんでしょうか?またプロファイルのバックアップもできません。 Exception..."Componet returned failure code:0*80520012(NS_ERROR_NOT_FOUND)[nslLocalFile.copyTo]~nsresult0*80520012(NS_ERROR_NOT_FOUND)"JS frame ::chroma;//febe/content/febe.js::febecopyFile :: line 1021" data : no] 上記がエラー内容です

  • Ajax.RequestでXMLデータをパース

    お世話になります。 Ajax.Requestをして、返ってくるデータがXMLなのですが このXMLをパースして表示したいのですが 何か方法はありませんでしょうか? もしかしたら簡単なことなのかもしれませんが ご存知の方がいらっしゃいましたら ご教授よろしくお願いいたします。 ajax.js //////////// function exec(fname,dispArea) { var httpObj = new Ajax.Request(fname, { method:'GET', onSuccess:function(req) { var text = req.responseText; $(dispArea).innerHTML = text; } } ); } ///////////test.html <script language="javascript" type="text/javascript" src="prototype.js"></script> <script language="javascript" type="text/javascript" src="scriptaculous.js"></script> <script language="javascript" type="text/javascript" src="ajax.js"></script> <span id="disp">exec('hoge.xml', 'disp');</script></span> //////////// hoge.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="hoge.xsl" ?> <top> <list> <row>テスト1</row> </list> <list> <row>テスト2</row> </list> <list> <row>テスト3</row> </list> </top> //////////// hoge.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="top"> <html><title>XMLパース</title> <body> <xsl:for-each select="list"> <xsl:value-of select="row" /> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>

  • Rails3でAjaxを使いたい

    どなたが知識をご教授下さい。 Rails3でAjaxのごく普通のハイパーリンクを作成したいのですが、うまくいきません。 /users/index.html.erb <div id="hoge"> <%= link_to "ajax",{:action => 'draw'},:remote => true %> </div> -- /users/_draw.html.erb ~いろいろ内容~ -- /users/draw.js.erb $('#hoge').html("<%= escape_javascript(render :partial => 'draw' )%>"); -- /users_controller.rb def draw ~いろいろ処理~ end -- ルーティング match 'users/draw' => 'users#draw' -- application.html.erb <%= javascript_include_tag :defaults %> -- gemfile gem 'jquery-rails' 以上のように処理するよう様々なサイトや書籍にはありましたが、「Templete Missing」のエラーが出てしまいます。かれこれ5時間以上ハマってまして、、、 どなたか知識をご教授頂けたら幸いです。 *メモ アクションdrawに渡ったときに、 「request.xhr?がfalse」ということは、ajax通信できていないということでしょうか???

    • ベストアンサー
    • Ruby
  • Thunderbird メール通知音の指定が出来ない

    Thunderbird 2.0.0.0 でメール着信の通知音を指定したいのですが、 ツール > オプション > 一般 > 次のサウンドファイルを指定するにチェック > 参照 と進んでも参照ダイアログが開かずwavファイルを指定できません。 エラーコンソールには エラー: uncaught exception: [Exception... "Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH) [nsIFileProtocolHandler.getFileFromURLSpec]" nsresult: "0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH)" location: "JS frame :: chrome://messenger/content/preferences/general.js :: anonymous :: line 110" data: no] と出ています。 どう対処すればよいかご存知の方はいらっしゃいますか?

専門家に質問してみよう