所以我有一个计时器,一个javascript代码和一个php文件,我的php文件只是在服务器端生成一个代码。
在计时器命中1秒后,我的JS代码正在运行代码。
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代码,以确保它不会再次获得旧的生成代码。
发布于 2016-01-20 09:06:04
您可以尝试将ajax请求中的cache设置为false:
$.ajax({
type: "GET",
url: "generate.php",
cache: false,
success: function(msg) {
$('.code').before(msg);
}
});缓存(默认值: dataType 'script‘和’jsonp‘为true,false ) 类型:布尔型 如果设置为false,浏览器将强制请求的页面不缓存。注意:将缓存设置为false只会正确地处理HEAD和GET请求。它的工作方式是将“_={时间戳}”附加到GET参数中。对于其他类型的请求,不需要该参数,但在IE8中,当将帖子发送到GET已经请求的URL时除外。
发布于 2016-01-20 08:58:33
它确实要等待3秒才能从generate.php获得答复,这更有可能是缓存问题。
如果您的网站启用了服务器端缓存,它将发送“旧”php生成的输出,而不是新的输出。
在url上添加一个越来越多的数字或一个小标记,如
"generate.php?v="+Date.now,强制服务器始终执行php代码并发送当前版本。
https://stackoverflow.com/questions/34895404
复制相似问题