页面关闭前如何发送ajax数据?

时间:2018-10-20 01:41:58

标签: javascript php ajax

我想在用户关闭页面(例如在线和离线)时向数据库发送一个值,我希望找到我尝试超过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();
?>

2 个答案:

答案 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秒,它将将该用户视为脱机用户。)潜在的缺点是数据库调用更多。 (您是否需要将其保留到数据库中?可以将其保存在内存缓存中吗?)