100分求解决onbeforeunload不稳定的问题 我想在浏览器关闭或跳转到其他页面时发送一些数据到服务器,我用onbeforeunload,可是我发现它不稳定,有的时候服务器能收到数据,有时候又收不到,不知道有没有解决办法?谢谢各位大侠了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 除了这个之外,还要写监听session,这样保险些 监听session?怎么做,麻烦说详细些,不了解啊 :) global中具体要看用什么语言 你用的AJAX么?用同步(同步还是异步忘记了:D)请求,就可以了。。IE 和 FF 都可以。。 (可能这俩浏览器的请求不一样,反正就两种,你挨个测下) 我是这么用的<body onbeforeunload="发送数据到服务器的JS语言"></body> O_O那不了解建议改成 XMLHTTP | XMLHTTPRequest 吧 除了改成XMLHTTP还有其他办法吗我发现每当我在发送数据到服务器的函数里加上一个alert时服务器就100%能收到数据(但每次关闭浏览器或跳转页面时都会弹出警告框),但一旦把alert去掉就不稳定 没有办法真正解决这样的问题,因为网络随时可以断开如果真想要这样的实现,需要配合服务器和客户端同时想办法1,客户端采用xmlhttp或者ajax定时发送数据到服务器,服务器数据库纪录最后的访问时间,服务器设置一个服务定时检查数据库,如果最后的时间与当前时间的差别大于一个设定的间隔值,认为该用户不在线 to:我发现每当我在发送数据到服务器的函数里加上一个alert时服务器就100%能收到数据(但每次关闭浏览器或跳转页面时都会弹出警告框),但一旦把alert去掉就不稳定等我测试下用XMLHTTP的具体方法,上次我做过一次不过后来发现不兼容OP,我就都K了。。 <!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> 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)%> 这样就可以兼容IE 和 FF了OP咱就不带它玩了:D 哎, XMLHTTP很好, 但它不支持跨域 muxrwc 可以解决你的问题 为什么不测试下呢? 为什么呢? 呵呵 IE下的xmlhttprequest都支持跨域的.FF下暂时还没办法 传说FF3有domain的属性 可以支持限制性的跨域 另外你可以尝试使用xmldom来代替xmlhttprequest貌似这个东西FF下支持跨域 不过访问目标一定要返回xml格式 几个js的问题。 关于图片路径替换 网页下拉框不下来,请帮帮我 如何利用js获取ajax控件 关于div的overflow:auto js中怎样给Form中的隐藏域赋值? 如何操作xml? addClass加载类,加载的类在创建时为什么一定要写成 #(id名).(class类名); 而直接写 .(class类名)就不能被调用 两个SELECT之间的互相控,大家帮个忙,我的新手。先谢了 jquery的autoComplete正则表达式中如何修改为只匹配开头的字母? 紧急求base64解码 popup显示问题
具体要看用什么语言
用同步(同步还是异步忘记了:D)请求,就可以了。。
IE 和 FF 都可以。。 (可能这俩浏览器的请求不一样,反正就两种,你挨个测下)
如果真想要这样的实现,需要配合服务器和客户端同时想办法
1,客户端采用xmlhttp或者ajax定时发送数据到服务器,服务器数据库纪录最后的访问时间,服务器设置一个服务定时检查数据库,如果最后的时间与当前时间的差别大于一个设定的间隔值,认为该用户不在线
我发现每当我在发送数据到服务器的函数里加上一个alert时服务器就100%能收到数据(但每次关闭浏览器或跳转页面时都会弹出警告框),但一旦把alert去掉就不稳定等我测试下用XMLHTTP的具体方法,上次我做过一次不过后来发现不兼容OP,我就都K了。。
<!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>
<!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)
%>
为什么呢? 呵呵
貌似这个东西FF下支持跨域 不过访问目标一定要返回xml格式