我的网站页面结构为 1)index.php使用ajax调用addline.php并返回的html附加到index.php 2)addline.php使用ajax调用另一个页面more.php,再次将返回的html附加到它 3)再次more.php调用另一个文件update.php,在update.php中,我有以下js代码
var number = parseInt("<?php echo $delFlag; ?>");
if ( number == 1) {
// Calling updateLine() function after 5 mins
timer = setTimeout("updateLine()",1000*5*60);
}
function updateLine() {
var flagId = <?php echo $flagId; ?>;
var dataPass = 'flagId=' + flagId;
$.ajax({
type: "POST",
url: "proc/updateLine.php",
data: dataPass,
cache: false,
success: function(){
// Show error if error is there
}
});
}
所有时间,我的位置仍然是index.php。
如果我不重新加载页面,javascript函数可以正常工作。如果我重新加载页面,它不起作用。我希望setTimeOut()调用即使在重新加载后也会在后台激活。它应该在5分钟后触发函数调用。
我如何实现它?
答案 0 :(得分:2)
重新加载页面会重置Javascript状态,并且无法直接在后台运行。
如果要求在页面重新加载后自动继续超时计数器,则必须以某种方式保持计数器状态。
这意味着必须考虑每个超时开始。一种选择是使用PHP以及load
和unload
事件来执行此操作,如下所示:
// timeout.php -- persists and returns the last timeout start by session
<?php
session_start();
$key = 'lastTimeoutStart';
if (isset($_GET[$key]))
$_SESSION[$key] = $_GET[$key];
else if (isset($_SESSION[$key]))
echo $_SESSION[$key];
?>
另外还有处理持久和加载的Javascript部分:
var lastTimeoutStart = 0;
if ( number == 1) {
// Calling updateLine() function after 5 mins
lastTimeoutStart = new Date().getTime();
timer = setTimeout("updateLine()",1000*5*60);
}
//
// Other code
//
$(document).load(function () {
$.get('timeout.php', function (data, textStatus, jqXHR) {
var persistedStart = data.lastTimeoutStart;
var tempTimeout = persistedStart + 1000*5*60 - new Date().getTime();
if (tempTimeout > 0) {
clearTimeout(timer);
timer = setTimeout("updateLine()", tempTimeout);
}
});
});
$(document).unload(function () {
var data = {"lastTimeoutStart": lastTimeoutStart};
$.get('timeout.php', data, function (data, textStatus, jqXHR) {});
});
上面的代码中可能存在错误,但希望您明白这一点。