処理を繰り返しているのですが
ネットワークエラーなどが発生したら
clearTimeoutするみたいな事は
出来るのでしょうか?
ネットワークエラーというのは
setTimeoutで5秒ごとに繰り返していて
ネットワークケーブルを抜いた時に
レスポンスがない場合に
clearTimeoutを実行したいです。
この場合、Ajaxでサーバのデータを取得を試み、失敗した場合は通信エラーとして処理するのがいいと思います。
<html> <head> <script> <!-- function getTransport(){ try{return new XMLHttpRequest();}catch(e){ try{return new ActiveXObject('Msxml2.XMLHTTP');}catch(e){ try{return new ActiveXObject('Microsoft.XMLHTTP');}catch(e){ }}} return false; } function check(){ var transport = getTransport(); if(!transport) return; transport.open('POST', 'test.txt', false); transport.send(''); if(!transport.status || transport.status >= 200 && transport.status < 300){ return true; }else{ return false; } } function test(){ var elem = document.getElementById("test"); if(!check()){ elem.innerHTML = new Date() + ":通信エラー発生"; }else{ elem.innerHTML = new Date() + ":通信中・・・"; setTimeout(test, 5000); } } //--> </script> </head> <body onload="test();"> <div id="test"></div> </body> </html>
サーバ側のデータ(test.txt)は適当に用意してください。
check関数は通信成功時にtrue、失敗時にfalseを返却します。成功時のみsetTimeoutを使用することで、通信失敗時に処理を止めます。
注意として、ここでは同期通信を採用しているので、通信中は処理が停止するという点があります。
参考になれば幸いです。
わかりました。
ありがとうございます。