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

时间:2012-03-16 13:58:50

标签: jquery

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

1 个答案:

答案 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);