スポンサーリンク

JavaScriptの動かないコード (中級編) Ajax読み込み時に「80020101」のエラー


クイズ…下記のコードが意図した動作をしないのは,どうしてですか。(制限時間1分)


やりたいこと:

  • Ajaxを使って,GETで外部ページを読み込む。
  • a.html上でリンクをクリックすると,b.htmlを読み込み,p要素の中に流し込む。b.html中にはJavaScriptのコードがある。
  • 下のコードでは例としてprototype.jsを使っているが,別にjQueryでも,素のXMLHttpRequestでもよい。


a.html

<a href="#" onclick="f1()">ここをクリック</a>

<p id="my_target_id">この中が書き換わります。</p>


<script type="text/javascript" src="prototype.js">
<script language="JavaScript">
<!--

function f1()
{
   new Ajax.Updater(
      'my_target_id', // 書き変えたい要素のID
      'b.html', // 読み込みたいURL
      {method: 'get'}
   );
}

//-->
</script>

b.html

<script language="JavaScript">
<!--

alert("これはb.htmlの内容です。");
alert("b.htmlは,無事 a.htmlに読み込まれました。");

//-->
</script>


(脚注:上のブロック内の表記では,一部タグを全角にしてある。全角<>のかわりに半角<>を使ってはてなダイアリーに記事を投稿すると,「続きを読む」表示や「見出しごとに表示」の際に,内容が正常に表示されない。)







答え





IE6,IE7では,Ajaxで読み込まれるページのJavaScriptが

   <script type="text/javascript">
   <!--
       〜〜
   //-->;
   </script>

のように丁寧にコメントアウトされていると,

80020101のため操作を完了できませんでした

エラーが表示される。


参照:
do u have extra comma? ok, ie will destroy your application!
http://extjs.com/forum/showthread.php...

If a page that includes a script declared with HTML comment markers is loaded via an AJAX call in IE (6 & 7) you will get a nasty looking error: "Erorr: Could not complete the operation due to error 80020101". There are threads that mention this, but to summarize, when asked to execute the scripts in content loaded in this manner IE chokes on the HTML style comments (the "<!--" and "-->").


IEで正常に動かしたいなら,読み込まれるページ(b.html)中のJavaScriptをコメントアウトせずに

   <script type="text/javascript">
       〜〜
   </script>

と書けばよい。


ちなみにFirefoxでは,前者の記法でも正常に動く。Firebugも何も言わない。
これは,かなりはまる。




※補足・・・同じようなエラー番号で,0x80020101 (-2147352319) というのもある。
http://support.microsoft.com/kb/310939