簡體   English   中英

頁面關閉前如何發送ajax數據?

[英]how to send ajax data before page is close?

我想在用戶關閉頁面(例如在線和離線)時向數據庫發送一個值,希望找到我嘗試了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();
?>

在您的ajax調用中,嘗試使用絕對URL而不是相對URL。 例如: /inc/offline.php

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秒沒有收到在線更新, ,則將該用戶視為脫機用戶。)潛在的缺點是有更多的數據庫調用。 (您是否需要將其持久保存到數據庫中?可以將其保存在內存緩存中嗎?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM