Jquery + Ajax не работает должным образом, почему? - PullRequest
0 голосов
/ 30 ноября 2018

Этот код будет показывать счетчик, когда есть строки со статусом = unread, и будет UPDATE строка до статуса = read, когда пользователь нажимает на значок <i class="fas fa-bell"></i>.

Проблема в том, что это не работает по-своему, когда я нажимаю на <i class="fas fa-bell"></i>, он получает задержку 3-9 секунд, чтобы обновить счетчик до 0, он мгновенно обновляет мою таблицу, только счетчик, который получает некоторую задержкуно иногда мне нужно перезагрузить страницу и щелкнуть значок, чтобы обновить таблицу, почему?Что не так?

html: <span class="text-white divCountNT" id="datacount"></span>

script:

<script>
  $(document).ready(function(){

    $("#datacount").load("select.php");

    setInterval(function(){
    $("#datacount").load('select.php')
    }, 10000);

  });

  $(document).on('click', '.fa-bell', function (){

    $.ajax({
       type: "POST",
       url: "update.php"
    });

  });
</script>

select.php:

<?php
require_once 'db.php';

if(!isset($_SESSION))session_start();

if(isset($_SESSION['user_id'])) {
  $user_id = $_SESSION['user_id'];
}

$status = 'unread';
$sql = $conn->prepare("SELECT * FROM noti WHERE status = :status AND user_id = :user_id");
$sql->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$sql->bindParam(':status', $status, PDO::PARAM_STR);
$sql->execute();
$countNT = $sql->rowCount();

if($countNT >= 1){
echo $countNT;
}

?>

update.php:

<?php
require_once 'db.php';

if(!isset($_SESSION))session_start();

if(isset($_SESSION['user_id'])) {
  $user_id = $_SESSION['user_id'];
}

$status = 'read';
$sql = $conn->prepare("UPDATE noti SET status = :status WHERE user_id = :user_id");
$sql->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$sql->bindParam(':status', $status, PDO::PARAM_STR);
$sql->execute();
$countNT = $sql->rowCount();

echo $countNT;

?>

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вы можете попробовать с этим кодом. Он работает отлично

$.ajax({
   type: "POST",
   url: "update.php"
   success: function(result){
        $(body).find("#loadData").html(result);
       // $(body).find("#loadData").append(result); //you can also use for append data insted of replace
   }
   error: function(xhr){
        alert("An error occured: " + xhr.status + " " + xhr.statusText);
   }
});

проверьте это для использования других методов AJAX https://www.w3schools.com/jquery/ajax_ajax.asp

0 голосов
/ 30 ноября 2018

У вас нет функции обратного вызова для вашего вызова ajax, поэтому ваша таблица обновляется только функцией загрузки.Ваш ajax-вызов должен быть примерно таким:

$.ajax({
   type: "POST",
   url: "update.php"
}).done(function() {
   window.location.reload(true);
});
...