2011-09-08 130 views
0

下面是應該每10秒鐘檢查一次數據頁面(一個簡單的整數)。當整數存在時(data!= null),然後提醒並停止好的時間間隔)。爲什麼這個js if子句不停止循環?

但是 相反,它每隔10秒排隊一次警報。當腳本終於找到它正在尋找的整數時,大量的警報彈出......每十秒鐘一次。如果腳本持續50秒,則會在頁面加載50秒後立即收到5條警報。

有什麼問題? if (data != null) {是否不應該阻止警報觸發......直到有數據?我很茫然。另外,「數據」從不出現在警報中。

var pinger; 
$(document).ready(function() { 
    var pinger = setInterval(function(){ 
     $.get("/ajax.php", function(data) { 
      if (data != null) {  /** Shouldn't this line stop loops? **/ 
       alert("alert" + data); 
       clearInterval(pinger); 
      } 
     }); 
    }, 10000); 
}); 
+0

您正在定義您的pinger變量兩次。您是否嘗試省略第一個(全局)聲明? – m90

+0

爲了使clearInterval正常工作,我已經閱讀過此類文檔。但是我遇到了更大的問題... setTimeout是要走的路。 – Ryan

回答

1

/ajax.php比setInterval()調用函數的延遲花費的時間更多。所以當它結束時,setInterval()實際上已經多次調用該函數。

使用的setTimeout()代替的setInterval():

$(document).ready(function() { 
    setTimeout(function self(){ 
     $.get("/ajax.php", function(data) { 
      if (data != null) { 
       alert("alert" + data); 
      } else { 
       setTimeout(self, 10000); 
      } 
     }); 
    }, 10000); 
}); 
+0

太好了。非常感謝。該腳本現在幾乎可以完美運行。但是,我使用了:alert(「text」+ data +「text」);'和輸出是「texttext」,當它應該是「text12345text」。數據本身沒有傳遞? – Ryan

+0

這意味着你的ajax.php腳本返回了一個空字符串 – arnaud576875

+0

ha,只需要替換alert(「alert」+ text);通過alert(「alert」+ data); – arnaud576875

0

我敢打賭,你不從$.get得到一個空(即使有一個空字符串,然後比較爲null返回true - '' != null返回true)。這就是警報彈出的原因。

此外,有些人提出了一個很好的觀點,即如果您的ajax調用需要超過10秒鐘,那麼即使先前的ajax可能會返回假設停止循環的正確數據,也會觸發另一次。