2012-05-01 26 views
2

我已經搜索了這個答案,我沒有找到它的原因可能只是我從getgo完全搞砸了我的腳本,所以請任何人誰可以幫助我非常感謝它。如何在php腳本完成通過ajax執行後停止setInterval

我有一個JavaScript函數,它觸發onClick提交表單並運行ajax調用script1.php,然後用setInterval啓動一個計時器。 setInterval調用另一個JavaScript函數來輪詢來自script1.php的輸出文件,以便我們可以將新數據添加到屏幕上。這部分工作正常。

但是,我想停止計時器script1.php完成處理。我該怎麼做呢?我嘗試在script1.php中放入一個clearInterval(myTimer)作爲它運行的最後一個語句,它似乎在瀏覽器中顯示,但它並沒有停止計時器。

<script type="text/javascript"> 

var myTimer; 
var file1 = "script1.php"; 
var file2 = "script2.php"; 


function startTimer(myTimer) { 
    myTimer = window.setInterval(loadData, 2000); 
} 

function stopTimer() { 
    clearInterval(myTimer); 
} 

function startData() 
{ 
ajaxRequest(file1,data); 
startTimer(myTimer); 

} 


function loadData() 
{ 
ajaxRequest(file2) 
} 


</script> 


<form action="index.php" method="post"> 
<div style="text-align:left;width:300px;"> 
<textarea style="width:300px;height:200px;"> </textarea><BR> 
<button type="button" onclick="startData()">get data</button> 
</div> 
</form> 

<div id="myDiv" style="text-align:left;width:500px;border:solid 1px #ccc;padding:50px;"> 
please enter data above 
</div> 

回答

1

是的,你搞砸了。您應該讓PHP直接將數據返回給執行AJAX調用的腳本。

在AJAX成功時,PHP腳本輸出的任何文本都可用於成功回調。

$.ajax({ 
    url: 'someurl', 
    success: function(response) { 
     // do whatever with response 
    } 
}); 
+0

由於某種原因,在我轉移到使用setInterval之前,這不起作用,但我再次嘗試,現在ajax工作正常。謝謝! – zoltar

+0

@ZekarKovacs沒問題。很高興我能幫上忙。如果這回答你的問題,你可能想通過點擊旁邊的複選標記來接受答案。 – dqhendricks

1

你傳遞myTimer作爲參數傳遞給startTimer。這使得myTimerstartTimer的局部變量。因此它不更新全球myTimer

它應該是:

function startTimer() { 
    myTimer = setInterval(loadData, 2000); 
} 

function stopTimer() { 
    clearInterval(myTimer); 
} 

然後你只需要調用startTimer()stopTimer()

0

,當你開始你的時間間隔將其分配到任何公開訪問的變量說「INTERVAL_ITEM」

,當你的反應實現clearInterval:

如果你使用JQuery,因爲這將是一樣簡單(INTERVAL_ITEM);