$.get和setTimeout组合在IE中不起作用



我必须每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);

最新更新