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