• ベストアンサー

ローカルでのonreadystatechangeの動作について

現在下記のようなコードを書いて、HTMLを読み込む処理を行おうとしています。 function LoadHtml(id , uri) { if(!XmlsReq)return; XmlsReq.open('GET',uri); XmlsReq.send(null); XmlsReq.onreadystatechange=function(){ alert("piyo"); if(XmlsReq.status==0 || XmlsReq.readyState==4 && XmlsReq.status==200) { alert("hoge"); document.getElementById(id).innerHTML=XmlsReq.responseText; } } document.getElementById(id).innerHTML=XmlsReq.responseText; } これはHTTPサーバ上で動かすとちゃんと動作し、 またHTTPステータスコードが0になるローカルでもfirefoxなら動くのですが、 IE7で試してみたところ、動作しません。 原因を探してみたところ、XmlsReq.send(null);までは実行されておりalert("piyo")が表示されないことから、 どうもonreadystatechangeイベントが検出されていないような動きをしています。 ローカルのIE7環境でちゃんと動作させるにはどうしたら良いか、分かる方居ましたら教えて下さい。

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.4

ローカルファイル(file://のurl)のときは、status を返すプログラム(http server)を経由してないので常にstatus == 0 です。これは、ブラウザによりません。 実行順については、既に指摘のあるとおり、open前に(最低でもsend前に)、onreadystatechangeをセットしておかないと、ローカルでの読み込みは次を実行するまえに終わってるので、つまりonreadystatechangeは、発生完了済みなので、補足されなくなります。 ネットワーク経由だと、どうしてもタイムラグがあるから、補足できていたのでしょう。 静的テキストを読みとるだけなら、readyState==4 だけ補足すれば、おおむね(ローカル、http経由を問わず)、受信出来るようです。 参考:miniajax 超最短スクリプト http://www.bigbold.com/snippets/posts/show/2025 ブラウザ別、実行状況は、とりあえず、こちらを参考にするとよいかもしれません。 http://jsgt.org/ajax/ref/test/response/responsetext/try1.php

その他の回答 (3)

回答No.3

> IEはreadystateが0で、statusが200です。 あー。。。。readyStateが4でstatusが0だったかも。。。m(_ _)m ライブラリに任せてるので結構忘れてます。ブラウザのバージョンでも違ったりしますし。 openの前にonreadystatechangeをセットすると、 open、送信開始、送信完了、受信完了で4回呼び出されるので、 readyStateをチェックせずにstatusだけでチェックしてたら、4回実行されるかもしれません。

回答No.2

> alert("piyo")が表示されないことから、 失礼しました。そっちの方ですか。 onreadystatechangeのセットが遅すぎます。 openの前にセットして下さい。

回答No.1

IEはreadystateが0で、statusが200です。 キャッシュファイルを読んでいる場合は、statusが302になることがあります。(全ブラウザ共通) statusコードの種類は、「HTTP ステータスコード」で検索して下さい。 404 FileNotFoundとかのアレです。

関連するQ&A