人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptのsetTimeoutを使用して、
処理を繰り返しているのですが
ネットワークエラーなどが発生したら
clearTimeoutするみたいな事は
出来るのでしょうか?

ネットワークエラーというのは
setTimeoutで5秒ごとに繰り返していて
ネットワークケーブルを抜いた時に
レスポンスがない場合に
clearTimeoutを実行したいです。

●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:JavaScript エラー ネットワーク レスポンス
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● susie-t
●60ポイント

この場合、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 &amp;&amp; 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を使用することで、通信失敗時に処理を止めます。

注意として、ここでは同期通信を採用しているので、通信中は処理が停止するという点があります。

参考になれば幸いです。

◎質問者からの返答

わかりました。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ