我想在用户关闭页面(例如在线和离线)时向数据库发送一个值,我希望找到我尝试超过7个小时的解决方案 但是不起作用
<script tysssspe="text/javascript">
//ST
window.onbeforeunload = function(){
var user_st = "0";
$.ajax({
type:"POST",url:"inc/offline.php",
data:"user_st="+user_st
});
}
//SD
</script>
到offline.php
<?php
tab
include "connect.php";
$UID = $_COOKIE["ID"];
$online_status = $_POST['user_st'];
$setStatus = $conn->prepare("UPDATE accounts SET online = :online_status WHERE id = :UID");
$setStatus->bindParam(':online_status',$online_status,PDO::PARAM_INT);
$setStatus->bindParam(':UID',$UID,PDO::PARAM_INT);
$setStatus->execute();
?>
答案 0 :(得分:0)
在ajax调用中,尝试使用绝对URL而不是相对URL。例如:/inc/offline.php
答案 1 :(得分:0)
onbeforeunload将在某些浏览器(Chrome)中运行,但在其他浏览器中则无效。 (Safari,FF和IE)。
一种解决方法是使ajax同步,
window.onbeforeunload = function(){
var user_st = "0";
$.ajax({
type:"POST",url:"inc/offline.php",
data:"user_st="+user_st,
async: false
});
}
,但不赞成使用同步Ajax。您可以尝试是否接受不赞成使用的方法。
如果您不要求在线/离线时间为100%实时,则可以采用一种解决方案,而不是离线报告,让用户在线报告(每隔30秒,如果服务器没有收到更多在线更新信息)超过30秒,它将将该用户视为脱机用户。)潜在的缺点是数据库调用更多。 (您是否需要将其保留到数据库中?可以将其保存在内存缓存中吗?)