【Ajax】ieでonreadystatechangeが動かないエラーの対策

Ajaxの非同期通信をWEBページに取り入れるべく、コーディングしていたら、ie(インターネットエクスプローラー)だけでエラーが出る現象に直面。

FireFoxやSafari、Operaなどでは、スイスイ動くのに、なぜかie7では動かない。前日の夜と本日の半日をかけて、ようやく動いたので覚書しときます。

 req.onreadystatechange = function(){
 処理
}

結論から言うと、onreadystatechange処理の中身がifの入れ子になっていたため動かなかった模様。

if節のエラーかとも思って確認したところif節にはエラーは確認できず。そもそも、FireFoxなどでは問題なく動くので原因は不明。

しかし、このif節を単純化し下のようにしたら、なぜかieでも動くように。

req.onreadystatechange = function(){
  if(req.readyState == 4 && req.status == 200 ){
  var kekka = req.responseText;
   document.getElementById("result").innerHTML = kekka;
   }
 }

上記だと、ifは一つだけです。単純化できてミスも防げます。

エラーがでていたコードは、if (){if(){}else{}}else{} のように場合わけしていたのですが、この構文の時には、onreadystatechangeがピクリともせず。
調べると、キャッシュされていると動かないとか。if節の場合分けの過程で、キャッシュされている可能性があるのかも

JavaScriptでエラー箇所を探すには、下のコードを怪しい部分に一行ずつ、ずらしながら入れていくと発見できます。

alert("アラート");

onreadystatechangeの下に入れると正常に動く場合には、連続して3回このアラートが出るので動いているかいないかの判断がつきます。

参考(調べているとき参考になったページ)

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1022889295

カテゴリー: Ajax, JavaScript パーマリンク

広告

コメントを残す

メールアドレスが公開されることはありません。