2011-07-19 54 views
0

我的html頁面觸發了2個php腳本,一個執行任務,另一個執行任務,另一個輪詢日誌文件並在html頁面顯示結果。 'updatestock.php'完成後,我該如何停止getStatus()過程?停止功能從條件滿足後執行

<script type="text/javascript"> 
    $(function() { 
     startProcess(); 
     getStatus(); 

    }); 

    function startProcess() { 

     $("#done").load('updatestock.php'); 

    } 

    function getStatus() { 

     $("#status").load('getstatus.php'); 
     setTimeout("getStatus()",2000); 

    } 

    </script> 

回答

0
var stopProcess = false; 


function startProcess() { 

    $("#done").load('updatestock.php', function() { 

     stopProcess = true; 

    }); 

} 

function getStatus() { 

    if (stopProcess){ 
     return false; 
    } 

    $("#status").load('getstatus.php'); 
    setTimeout("getStatus()",2000); 

} 
0

把延遲調用getStatus回調爲load,並使用if語句來確定是否調用或不基於什麼getstatus.php回報。它可以是某個特定的響應碼或數據位,例如JSON響應中的"finished": true

2

load()方法使用回調設置一個標誌,然後在getStatus()方法檢查它:

$(function() { 
    startProcess(); 
    getStatus(); 

    var flag = false; 
}); 

function startProcess() { 

    $("#done").load('updatestock.php', function() { 

     flag = true; 

    }); 

} 

function getStatus() { 

    if (flag) return false; 

    $("#status").load('getstatus.php'); 
    setTimeout("getStatus()",2000); 

} 
+0

此代碼didnt觸發getStatus函數,直到我移動'var flag = false;'到函數的外部{} – jriggs

3

你會使用clearTimeout:

// persistent variable needed 
var timeout = 0; 
$(function() { 
    startProcess(); 
    getStatus(); 

}); 

function startProcess() { 
    // second parameter of load = completion callback 
    $("#done").load('updatestock.php',function() 
    { 
     // clearTimeout will stop the next getStatus from firing. 
     clearTimeout(timeout); 
     timeout = -1; 
    }); 

} 

function getStatus() { 
    // just in case. You never know what's cached. 
    // (the ids for setTimeout are positive). 
    if(timeout < 0) return; 
    $("#status").load('getstatus.php'); 
    // sets the ID of the current timeout. 
    timeout = setTimeout("getStatus()",2000); 

}