2014-08-29 133 views
0

這工作正常,但我試圖找到一個很好的解決方案,當所有響應已通過Ajax從數據庫中提取時,阻止Javascript setInterval如何在所有Ajax調用完成後停止setInterval?

For循環內for循環可以工作,我想?!

HTML:

<!-- code is simplefied, problem is not about syntax, but the way to do it. --> 

SELECT id FROM database WHERE x=y 

$rows = countrows(); //know how much different output there is 

for(i=1; i <= rows; i++) // Show div everytime there's a response 
{ 
$data-> fetch(); 

<div id="<?php echo "div" . $i;?>"> 
    <?php echo 'id' . $data['id']; ?> 
</div> 
} 

比方說,我們從數據庫3層的反應,我們有3個div s的3角不同的id秒。

使用Javascript:

setInterval(getResponse(), 1000); //execute function every second 

getResponse() 
{ 

    for(i=1; i <= $rows; i++) 
    { 
    //Here is the problem 
    //Stop getResponse function execution when all responses has been taken 
    if(response[i] && reponse[i] && ...) 
    { 
     //Stop function 
    } 

    //Select id . $data['id'] WHERE div . $i = i; 
    // GET VARIABLE FROM DATABASE WHERE ID = 'id' . $data['id']; 
    if(response) 
    { 
     //INSERT THIS VARIABLE IN THE RIGHT DIV. 
     $response[i] = true; 
    } 
    } 
} 
+1

你可以'break;'或're爲了「停止函數中的for循環」,使用「turn'' – 2014-08-29 08:33:10

+6

['window.clearInterval(intervalId)'](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.clearInterval ) – BlitZ 2014-08-29 08:33:44

+0

問題是如何知道何時將所有響應[i]設置爲true以便我可以阻止它 – gr3g 2014-08-31 09:42:19

回答

2

保存間隔識別到可存取對象或變量:

window.responseLoopInterval = window.setInterval(getResponse(), 1000); 

然後使用window.clearInterval() + return防止功能執行

// somewhere in getResponse() function 
if(... stop condition ...){ 
    window.clearInterval(window.responseLoopInterval); // remove interval loop 
    return; // prevent further function execution 
} 
+0

問題更多地是關於如何停止循環的條件。例如,有2個響應,響應[1] &&響應[2]已被設置爲真。 然後如果條件看起來像這樣:if(response [1] && response [2])。 但是答覆的數量是一個變量,所以我不知道我會得到多少迴應... – gr3g 2014-08-31 09:45:34

+1

@ user1824508'if(response.length> = 2){... stop loop .. 。'?? – BlitZ 2014-09-01 02:43:58