当使用window.onunload调用时,AJAX调用在IE8及以下中止

时间:2013-04-04 08:12:35

标签: javascript jquery ajax

我有一个jQuery AJAX调用,每5分钟调用一次,当用户离开页面时(使用不同的参数)。

/* Remove locks when leaving page - AJAX 'aborted' by IE8 and below */
    window.onunload = function () {
        manageLocks(2)
    }

    /* Refresh locks every 5 minutes - AJAX works fine in all browsers */
    window.setInterval(function () {manageLocks(1);}, 30000);

    function manageLocks(mode) {
        $.ajax({
            type: "POST",
            url: "/System/ManageLocks",
            data: '{ "action" : ' + mode + '}',
            contentType: "application/json",
            dataType: "json",
            cache: false
        });
    }

我不认为这是AJAX调用的问题,而是调用该函数的方式。使用window.setInterval调用时,它在所有浏览器中都可以正常工作,但在使用window.onunload调用时,在IE8及以下的网络面板中显示为“已中止”。

是否有人知道旧的IE版本在以这种方式调用时会阻止某些功能,或者对onunload的支持不稳定?还有另一种方法可以让它在旧的IE版本中运行吗?

只要我可以每隔5分钟调用managelocks函数以及当用户离开页面时(我知道实际上,当浏览器关闭时不会调用该函数 - 我可以忍受这种情况)我不是太挑剔如何发生。

感谢。

1 个答案:

答案 0 :(得分:2)

尝试将ajax调用的异步参数设置为false,以便执行调用然后卸载页面。在尝试在卸载页面的同时执行ajax调用的那一刻,似乎在调用完成之前卸载了页面,因此通过将async设置为false来取消ajax调用将允许ajax调用完成在页面卸载之前