所以我有一个计时器,一个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调用 –
好吧,我只是编辑代码。应该更具体。 –