私は数秒ごとにサーバーをポーリングしてDOMを更新するJavascriptの短いスニペットを持っています。setIntervalはAndroidのFirefoxで継続的に実行されます
function updateCard() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
card = JSON.parse(this.responseText);
document.getElementById("season").innerHTML = card.season;
}
};
xhttp.open("GET", "/curr_card/", true);
xhttp.send();
}
window.onload = updateCard;
window.setInterval(updateCard,2000);
ほとんどのブラウザではどうなりますか。 updateCard
への一回限りの通話がありますが、サーバー全体でクライアントあたり1秒あたり〜1/2接続が表示されます。
しかし、Android(49.0)でFirefoxのページにアクセスすると、ブラウザは連続してポーリングを開始します/curr_card/
、数十秒。
setInterval行をwindow.setInterval(function() {updateCard();},2000);
に置き換えることをおすすめしていますが、これは役に立ちません。
私はJavascriptとAJAXの新機能です。なぜこれが起こっているのか分かりません。それはFFのバグですか?私は要求されればより多くのコードを掲載することができます
ありがとうございます。
私はバグについて知りません。 '' 'window.setTimeout()' ''を使ってみましたか?それがうまくいけば、 '' 'updateCard()' 'の最後にタイマーを設定するだけで、それは再び自分自身を呼び出すことになります... – Dario
@Darioに落ち着くのは良い考えですが、おそらく正確に2秒(それが重要である場合)ではありません。 Gyppo、ちょうどちょうどちょっと後に、最初から数十秒間連続して投票しますか?また、AndroidでChromeでこれが起こらないと想定するのは安全ですか? – Zach
再帰的なsetTimeoutを置くことはできません。なぜなら、関数は他の場所からも呼び出されるからです。しかし、私は再帰的なラッパーを作った: 'function continuousUpdate(){updateCard(); window.setTimeout(continuousUpdate、2000); } window.onload = continuousUpdate; ' これは同じ問題を抱えています。 AndroidのChromeでこの問題は表示されません。 – Samizdis