浏览器退出时的AJAX更新数据库

时间:2010-11-15 19:49:30

标签: ajax

我有一个字段'status'的数据库,离线时默认为0,在线时为1。我想知道是否有人知道在浏览器关闭时更新数据库的方法(将1设置为0)。有人建议我使用机身卸载并指向AJAX,但我不知道该怎么做...请帮助,谢谢......

2 个答案:

答案 0 :(得分:2)

这是浏览器关闭事件的简单解决方案。我在onunloadbeforeonunload事件中遇到了一些问题。它将在浏览器关闭,标签关闭,任何链接点击,URL更改时触发。所以我自定义了我的代码:

 <script type="text/javascript">
        jQuery(document).ready(function() { 
          var validNavigation = false;

          // Attach the event keypress to exclude the F5 refresh
          $(document).bind('keypress', function(e) {
            if (e.keyCode == 116){
              validNavigation = true;
            }
          });

          // Attach the event click for all links in the page
          $("a").bind("click", function() {
            validNavigation = true;
          });

          // Attach the event submit for all forms in the page
          $("form").bind("submit", function() {
            validNavigation = true;
          });

          // Attach the event click for all inputs in the page
          $("input[type=submit]").bind("click", function() {
            validNavigation = true;
          }); 

          window.onbeforeunload = function() {                
              if (!validNavigation) {                            
                 var status = 'abandoned';
                    $.ajax({
                        type: "POST",
                        url: your action URL,
                        data: "status=" + status,
                        success: function(res) {
                        },
                    });
              }
          };
        }); 
    </script>

答案 1 :(得分:0)

Piskvor死了。没有可靠的方法来确定用户何时实际离开您的网站,例如,去bored.com - 或者如果他们有两个打开的窗户都在查看您的网站,他们决定关闭其中一个。这就是为什么,在大多数情况下,登录会话到期,网站提供“注销”按钮 - 以确定无疑。

如果你想进一步探索这条路线,就像创建一个javascript函数一样简单

function doAjaxThingy(){

    var qty = document.getElementById(q).value;
    var ajax = getXmlObject();
    var url= '/doAjaxThingy.php';

    if (ajax.readyState == 4 || ajax.readyState == 0) {
        ajax.open("POST", url, true);
        ajax.onreadystatechange = function (){
            if (ajax.readyState == 4) {    
                alert(ajax.responseText);
            }
        }; 
        ajax.send(null);
    }
}

function getXmlObject() {
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            return new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            showError('Status: Cound not create XmlHttpRequest Object. Consider upgrading your browser.','Please Wait');
        }
    }

然后让页面知道在卸载时调用该函数

<body onunload="doAjaxThingy();">