我有一个字段'status'的数据库,离线时默认为0,在线时为1。我想知道是否有人知道在浏览器关闭时更新数据库的方法(将1设置为0)。有人建议我使用机身卸载并指向AJAX,但我不知道该怎么做...请帮助,谢谢......
答案 0 :(得分:2)
这是浏览器关闭事件的简单解决方案。我在onunload
和beforeonunload
事件中遇到了一些问题。它将在浏览器关闭,标签关闭,任何链接点击,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();">