我必须每1分钟执行一次特定的代码,我的代码是这样的。以下代码适用于除IE之外的所有浏览器。问题是:/common/ajaxpage.aspx第一次命中,从下一次开始没有命中,但timedcount每1分钟调用一次,变量"data"每次都返回"not perated",即使没有调用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);
}
});
}
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);