所以我有一個計時器,一個javascript代碼和一個php文件,我的php文件只是在服務器端生成一個代碼。關於javascript延遲
我的JS代碼在我的計時器擊中1秒後運行代碼。
timeleft = 120,
ms = 1000;
var timerinterval;
var socket = io.connect('http://x:3333');
if ($('.run #timeleft').size() > 0) {
socket.on('timer', function(data) {
timeleft = data.timeleft;
if (timeleft == 1) {
setTimeout(function() {
$.ajax({
type: "GET",
url: "generate.php",
success: function(msg) {
$('.code').before(msg);
}
});
}, 3500);
}
});
setInterval(updatetimer, 1);
}
function updatetimer() {
var n = 99 - Math.round((new Date()).getMilliseconds()/10);
if (timeleft == 120) {
n = 0;
}
if (n < 0) {
n = 0;
}
if (timeleft <= 0) {
n = 0;
}
if (timeleft < 0) {
timeleft = 0;
}
$('.run #timeleft').html(timeleft + ((n < 10) ? '.0' : '.') + n);
}
但問題是我的JS代碼有時會推送舊的生成的代碼。所以我在這裏遇到時間問題。
正如我所分析的,超時函數在超時之前從generate.php獲取代碼,但它在3秒後運行代碼。所以這是造成錯誤。邏輯是應該的,在3秒後從generate.php獲取代碼,而不是像獲取它並等待3秒鐘推動它。
我需要的是在3秒後得到generate.php代碼,以確保它不會再次獲得舊生成的代碼。
試試這個:'setTimeout(function(){$('。code')。before(msg);},3000)' – Rayon
我認爲你會混淆一些東西。你能向我們展示代碼發佈的代碼嗎?我想了解你如何設置'時間'。它目前所說的:如果時間== 1,然後等待3秒(並在等待時不做任何事情),然後執行ajax調用 –
好吧,我只是編輯代碼。應該更具體。 –