関数に「str」を付けたまま、どのようにIntervalを設定できるかを理解するのに助けが必要です。
クライアントがオプションを選択し、関数「GET」が選択されたオプションです。しかし、setIntervalで更新すると、文字列が失われます。これを行うにはどうすればよいですか。
私はこれを試しました:
<script type="text/javascript">
function countrystats(str)
{
if (str=="")
{
document.getElementById("countrystats").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("countrystats").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","countrystats.php?q="+str,true);
xmlhttp.send();
setInterval(countrystats, 5000);
}
</script>
うまくいけば、あなたは私がこの混乱を整理するのを手伝ってくれるでしょう:-)
私はこれがいくつかのjQueryで実行できることを知っていますが、私はそれを機能させるようです。たぶん、これら2つのことが関連している、私は知らない:-)
関数countrystatsが入力を取得する方法は次のとおりです。
script type="text/javascript">
$("#countrystats_menu > li > a").click(function (ev) {
var str = $(this).html();
countrystats(str);
$('#country_span').html(str);
});
</script>
編集/解決策:
問題は、setIntervalを実行すると、接続されているstrが失われることでしたが、このコードはそれを保持しているようです。
setTimeout((function(strPriorToTimeout)
{//IIFE's scope preserves state of str variable
return function()
{
countrystats(strPriorToTimeout);
};
})(str),5000);