在子浏览器窗口关闭时调用ajax函数

时间:2011-11-02 07:34:56

标签: php javascript ajax

我正在使用此代码在子浏览器窗口关闭时更新数据库

window.onbeforeunload  = check;
    function check(){

          var url = 'chat_update.php?chatId='+<?php echo $_GET['chatId'];?>;
            if(window.XMLHttpRequest){
                xmlhttp = new XMLHttpRequest();

            }else{
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

            }
            xmlhttp.open("GET",url + Math.random(),false);
            xmlhttp.send();

            return false;
    }

它运行正常但是当子浏览器窗口刷新时,check()函数仍在调用。任何只在子窗口关闭时调用该函数的解决方案?

2 个答案:

答案 0 :(得分:0)

无法确定窗口是关闭还是刷新(请参阅the docs,尤其是要调用部分)。但是在你的主窗口中你可以检查,如果子窗口关闭,在onbeforeunload事件被触发后(我假设你的主窗口中有一个引用到你的子窗口)。

// in main windows js
child.onbeforeunload = function() {
    window.setTimeout(function() {
        if(child.closed) {
            // Perform your ajax here
        }
    }, 500);
}

答案 1 :(得分:0)

请注意 - Opera不支持onbeforeunload,请尝试使用onunload