プロが教える店舗&オフィスのセキュリティ対策術

現在下記のようなコードを書いて、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環境でちゃんと動作させるにはどうしたら良いか、分かる方居ましたら教えて下さい。

A 回答 (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/responset …
    • good
    • 1

> IEはreadystateが0で、statusが200です。


あー。。。。readyStateが4でstatusが0だったかも。。。m(_ _)m
ライブラリに任せてるので結構忘れてます。ブラウザのバージョンでも違ったりしますし。

openの前にonreadystatechangeをセットすると、
open、送信開始、送信完了、受信完了で4回呼び出されるので、
readyStateをチェックせずにstatusだけでチェックしてたら、4回実行されるかもしれません。
    • good
    • 0

> alert("piyo")が表示されないことから、



失礼しました。そっちの方ですか。

onreadystatechangeのセットが遅すぎます。
openの前にセットして下さい。
    • good
    • 0

IEはreadystateが0で、statusが200です。



キャッシュファイルを読んでいる場合は、statusが302になることがあります。(全ブラウザ共通)

statusコードの種類は、「HTTP ステータスコード」で検索して下さい。
404 FileNotFoundとかのアレです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!