为什么AJAX settimeout不起作用?

时间:2013-03-11 01:16:50

标签: ajax settimeout

我有点疯狂试图理解为什么这会输出一次json数据然后不再按照超时功能输出。我做错了什么?

<script type="text/javascript">
var myTimer =0;
function ajax_get_json(){
var results = document.getElementById("results");
var hr = new XMLHttpRequest();
hr.open("POST", "ballJson.php",true);
hr.setRequestHeader("Content-type", "application/json");
hr.onreadystatechange = function() {
    if(hr.readyState == 4 && hr.status == 200) {
        var data = JSON.parse(hr.responseText);
        results.innerHTML = "";
        for(var obj in data){
            results.innerHTML += data[obj]+"<br />";
        }
    }
}
hr.send(null);
results.innerHTML = "requesting...";
myTimer = setTimeout('ajax_get_json()',10000);
}
</script>

1 个答案:

答案 0 :(得分:3)

我认为你想使用setInterval函数setTimeout仅执行一次。

最好使用setTimeout(function () { ajax_get_json(); }, 10000)setTimeout(ajax_get_json, 10000),而不是使用被评估为函数回调的字符串。

另请注意,ajax请求可能随时完成,因此使用setInterval不会每10秒完成一次。您也可以在setTimout回调中拨打onreadystatechange来对来电进行链接。