2012-10-05 41 views
0

我有這個html和ajax文件,但它並不像我想要的那樣每秒更新一次。我希望每秒調用一次getTime()。它只做了一次,然後沒有。AJAX不循環

有什麼想法?謝謝。

<head> 
    <title>Auction</title> 
    <script type="text/javascript"> 
     function getTime() { 
      if (str=="") { 
       document.getElementById("txtHint").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("txtHint").innerHTML=xmlhttp.responseText; 
       } 
      } 

      xmlhttp.open("GET","functions.php?action=getCurrentTime&id=13",true); 
      xmlhttp.send(); 

      setTimeout(getTime, 1000); 
     } 

     window.setInterval(getTime, 1000); 
    </script> 
</head> 
<body> 
    <?php beginGetAllInfo(); ?> 
</body> 

回答

1

根據您的示例代碼,出現這種情況的內部getTime()是它檢查是否一個名爲str變量是空的第一件事情,如果是這樣,它從該函數返回。 str未定義(在您的示例代碼中),因此應該返回。嘗試刪除if -statement,或將str初始化爲不會導致語句失敗的內容。

此外,你有兩種說法,將(最終)導致代碼執行每秒兩次: setTimeout(getTime, 1000);window.setInterval(getTime, 1000);

第一,setTimeout()將執行代碼一次,之後1秒已經過去了。但是,每次執行getTime()方法時都會執行此操作 - 理論上它應該每秒運行一次。 第二個,setInterval()將以1秒爲間隔執行代碼。所以,你的代碼總是每隔1秒執行一次。

我建議要麼去除setTimeout()getTime()內,或改變setInterval()setTimeout()(讓球滾動,可以這麼說)。