我想在浏览器关闭或跳转到其他页面时发送一些数据到服务器,我用onbeforeunload,可是我发现它不稳定,有的时候服务器能收到数据,有时候又收不到,不知道有没有解决办法?谢谢各位大侠了

解决方案 »

  1.   

    除了这个之外,还要写监听session,这样保险些
      

  2.   

    监听session?怎么做,麻烦说详细些,不了解啊  :)
      

  3.   

    global中
    具体要看用什么语言
      

  4.   

    你用的AJAX么?
    用同步(同步还是异步忘记了:D)请求,就可以了。。
    IE 和 FF 都可以。。 (可能这俩浏览器的请求不一样,反正就两种,你挨个测下)
      

  5.   

    我是这么用的<body onbeforeunload="发送数据到服务器的JS语言"></body>
      

  6.   

    O_O那不了解建议改成 XMLHTTP | XMLHTTPRequest 吧
      

  7.   

    除了改成XMLHTTP还有其他办法吗我发现每当我在发送数据到服务器的函数里加上一个alert时服务器就100%能收到数据(但每次关闭浏览器或跳转页面时都会弹出警告框),但一旦把alert去掉就不稳定
      

  8.   

    没有办法真正解决这样的问题,因为网络随时可以断开
    如果真想要这样的实现,需要配合服务器和客户端同时想办法
    1,客户端采用xmlhttp或者ajax定时发送数据到服务器,服务器数据库纪录最后的访问时间,服务器设置一个服务定时检查数据库,如果最后的时间与当前时间的差别大于一个设定的间隔值,认为该用户不在线
      

  9.   

    to:
    我发现每当我在发送数据到服务器的函数里加上一个alert时服务器就100%能收到数据(但每次关闭浏览器或跳转页面时都会弹出警告框),但一旦把alert去掉就不稳定等我测试下用XMLHTTP的具体方法,上次我做过一次不过后来发现不兼容OP,我就都K了。。
      

  10.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>UNLOAD</title>
    </head>
    <body>
    <script type="text/javascript">
    var ajax = window.ActiveXObject ? new window.ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();window.onload = function () {
    ajax.open("GET", "UpE.asp?Id=1&Status=1&Timer=" + (new Date).getTime(), false);
    ajax.send(null);
    };window.onbeforeunload = function () {
    ajax.open("GET", "UpE.asp?Id=1&Status=0&Timer=" + (new Date).getTime(), false);
    ajax.send(null);
    };
    </script>
    </body>
    </html>
      

  11.   

    UP.asp
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>UNLOAD</title>
    </head>
    <body>
    <script type="text/javascript">
    var ajax = window.ActiveXObject ? new window.ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();window.onload = function () {
    ajax.open("GET", "UpE.asp?Id=1&Status=1&Timer=" + (new Date).getTime(), false);
    ajax.send(null);
    if (!eval(ajax.responseText)) {
    alert("已经存在注销onbeforeunload");
    window.onbeforeunload = new Function;
    };
    };window.onbeforeunload = function () {
    ajax.open("GET", "UpE.asp?Id=1&Status=0&Timer=" + (new Date).getTime(), false);
    ajax.send(null);
    };
    </script>
    </body>
    </html>
    UpE.asp<!--#include virtual="Include/conn.asp"-->
    <%
    Sub Update(Id, Status)
    Dim conn, rs
    Set conn = OP_DB
    Set rs = Server.CreateObject("Adodb.RecordSet")
    rs.Open "SELECT [UP] FROM [USERID] WHERE [Id] = " & Id, conn, 1, 3

    If Not rs.Eof Then
    If rs("Up") And Status = "1" Then
    Response.Write 0
    Else
    rs("Up") = Status
    rs.Update
    Response.Write 1
    End If
    End If

    Closes Array(rs, conn)
    End SubUpdate RE("Id", 1, 1), RE("Status", 1, 1)
    %>
      

  12.   

    这样就可以兼容IE 和 FF了OP咱就不带它玩了:D
      

  13.   

    哎, XMLHTTP很好, 但它不支持跨域
      

  14.   

    muxrwc 可以解决你的问题 为什么不测试下呢? 
    为什么呢?  呵呵
      

  15.   

    IE下的xmlhttprequest都支持跨域的.FF下暂时还没办法 传说FF3有domain的属性 可以支持限制性的跨域
      

  16.   

    另外你可以尝试使用xmldom来代替xmlhttprequest
    貌似这个东西FF下支持跨域 不过访问目标一定要返回xml格式