チャットを作っていてひらめいた。
今まではAjaxで連続的にデータを取得したいとき以下のようなコードを書いていた
intvl=500;
t=setInterval(“reload()”,intvl);
function reload(){
jQuery.get(“url”,function(data){
煮たり焼いたり(data);
});
}
一応これでもできるが、これだとそのうち通信しなくなってしまう。
ぼーっとしていてふと思ったのが再帰的方法。なぜ今更思いついたんだろう。
ソースコードを以下のようにすればずっと放置していてもちゃんとデータを取得できる。
function reload(){
jQuery.get(“url”,function(data){
煮たり焼いたり(data);
reload();
});
}
これでreload()が呼び出されたときにそこから止まることなく連続で取得が始まる。
え?サーバーへの負荷?んなもん知らん。
というのもまずいので一応自分なりの対処方法を書いてみる。
以下の方法でサーバーへの負荷を軽減できる。
intvl=500;
function reload(){
jQuery.get(“url”,function(data){
煮たり焼いたり(data);
setTimeout(“reload()”,intvl);
});
}
intvlの値を大きくすればするほどサーバーへの負荷は減るが更新間隔が長くなる。
setIntervalであればclearIntervalでストップすることができるが、これだと起動してしまうとストップできないように見える。
一応対処法がふとひらめいたのでコードにまとめておく。
reloadFlag=true;
intvl=500;
reload();
function reload(){
if(reloadFlag){
jQuery.get(“url”,function(data){
煮たり焼いたり(data);
setTimeout(“reload()”,intvl);
});
}
}
こうしておけばreloadFlagの値をfalseにするだけでreload()を停止することができる。