我必须每1分钟执行一次特定的代码,我这样编码了。以下代码适用于IE以外的所有浏览器。 问题是:../common/ajaxpage.aspx第一次命中,从下次没有击中但是timedcount每隔1分钟调用一次,变量“data”每次返回“未过去”,即使ajaxpage.aspx是不叫。
var gt_t;
$(document).ready(function () {
gt_t = setTimeout('timedCount()', 60000);
OnSaveBtnFix();
OnStart();
alert(gt_t);
});
function timedCount() {
alert("timed count started");
$.get('../common/AjaxPage.aspx', { action: 'sessionexp', TypeID: 'ClientID' }, function (data) {
alert(data);
if (data == "Elapsed") {
dispalySessionPopup();
gt_t = setTimeout('timedCount()', 60000);
}
else if (data == "null") {
hidePopup('popupMsg');
document.location.href = "../Index.aspx?logout=y";
}
else {
gt_t = setTimeout('timedCount()', 60000);
}
});
}
答案 0 :(得分:1)
IE可能正在缓存您的请求。您可以将$.get
来电转换为$.ajax
来电并使用cache
选项。 jQuery会在请求结束时添加一个时间戳,迫使浏览器发出新的请求:
$.ajax({
type: 'GET',
url: '../common/AjaxPage.aspx',
data: { action: 'sessionexp', TypeID: 'ClientID' },
cache: false, // no caching
success: function (data) { .... }
});
作为旁注,使用带有函数引用的setTimeout
版本被认为是最佳实践,而不是字符串。换句话说:
gt_t = setTimeout('timedCount()', 60000);
可以/应该重写:
gt_t = setTimeout(timedCount, 60000);