Как отправить данные AJAX до закрытия страницы? - PullRequest
0 голосов
/ 20 октября 2018

Я хочу отправить значение в базу данных, когда пользователь закрывает страницу, например, в Интернете и в автономном режиме, надеюсь найти решение, которое я пробовал более 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 голосов
/ 20 октября 2018

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 секунд, он рассматривает этого пользователя как офлайн.) Потенциальным недостатком является то, что большее количество вызовов БД.(Вам нужно сохранить его в базе данных? Может ли это быть в memcache?)

0 голосов
/ 20 октября 2018

В вашем вызове ajax попробуйте использовать абсолютный URL вместо относительного.Пример: /inc/offline.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...