- ベストアンサー
ローカルでの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環境でちゃんと動作させるにはどうしたら良いか、分かる方居ましたら教えて下さい。
- みんなの回答 (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)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
> IEはreadystateが0で、statusが200です。 あー。。。。readyStateが4でstatusが0だったかも。。。m(_ _)m ライブラリに任せてるので結構忘れてます。ブラウザのバージョンでも違ったりしますし。 openの前にonreadystatechangeをセットすると、 open、送信開始、送信完了、受信完了で4回呼び出されるので、 readyStateをチェックせずにstatusだけでチェックしてたら、4回実行されるかもしれません。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
> alert("piyo")が表示されないことから、 失礼しました。そっちの方ですか。 onreadystatechangeのセットが遅すぎます。 openの前にセットして下さい。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
IEはreadystateが0で、statusが200です。 キャッシュファイルを読んでいる場合は、statusが302になることがあります。(全ブラウザ共通) statusコードの種類は、「HTTP ステータスコード」で検索して下さい。 404 FileNotFoundとかのアレです。