Как передать переменную цикла while из Php в функцию JavaScript, которая выполняется в реальном времени

#javascript #php

#javascript #php

Вопрос:

То, что я пытаюсь создать правильно, — это, по сути, уведомление, когда кто-то отправляет вам сообщение. Это просто, когда я нахожусь на веб-странице чата, и друг отправляет мне сообщение, рядом с его именем появляется уведомление. Моя проблема, как следует из названия, заключается в том, что я нахожу трудности с передачей переменной цикла while из Php в функцию JavaScript.

Вот мой Php-код:

 <?php
$query = $db->prepare("
    SELECT frst_user AS frst, scnd_user AS scnd 
    FROM frnd_rqst
    WHERE (frst_user=:fid OR scnd_user = :fid)#
        AND status=2
");
$query->bindParam(":fid", $getid);
$query->execute();
while($row = $query -> fetch(PDO::FETCH_ASSOC)) {
    $numrow = $query -> rowCount();
    $frst = $row['frst'];
    $scnd = $row['scnd'];   
    $sec_quer = $db->prepare("
        SELECT fname, lname, stud_id 
        FROM stud_bas 
        WHERE stud_id!=:sid 
            AND (stud_id=:fid OR stud_id = :tid)
    ");
    $sec_quer->bindParam(":sid", $getid);
    $sec_quer->bindParam(":fid", $frst);
    $sec_quer->bindParam(":tid", $scnd);
    $sec_quer->execute();
    $result = $sec_quer->fetch();
    $fname = $result['fname'];
    $lname = $result['lname'];
    $frid = $result['stud_id'];
?>

    <ul>
        <li  class="friend-message" id="<?php echo $frid;?>" value="<?php echo $frid;?>">
            <a href="#" ><?php echo $fname." ".$lname;?></a>
        </li>
        <p id="fridfrid<?php echo $frid;?>"></p>
    </ul>
<?php
}
?>
 

Вот код JavaScript:

 <script type="text/javascript">
  function numberOfMessages() {
    var no_msg = new XMLHttpRequest();
    var frid = "<?php echo $frid;?>";
    no_msg.onreadystatechange = function() {
      if (no_msg.readyState==4 amp;amp; no_msg.status==200) {
      document.getElementById('fridfrid'   frid).innerHTML = no_msg.responseText;
      }
    }
    no_msg.open('GET','php/testing.php?frid='   frid, true);
    no_msg.send();
  }
  setInterval(function(){numberOfMessages()},1000);
</script>
 

Я попытался поместить функцию в цикл while, но работает только для последнего вывода. Я также пробовал, где вы получаете все имена, но, похоже, это тоже не работает для меня. Есть предложения?

Комментарии:

1. Если вам нужно взаимодействие сервер-клиент в режиме реального времени, то, вероятно, вам нужно будет реализовать nodejs.org/en или аналогичный движок вместо php. В противном случае на вашем сервере могут скоро закончиться ресурсы.

2. возможно, вы также захотите посмотреть веб-сокеты.

3. @KiranShakya я не думаю, что это решило бы какие-либо проблемы. Насколько я понимаю, цикл while просто останавливается, когда сообщений не остается, и цель состоит в том, чтобы новые сообщения отображались сразу после их появления. Посмотрите на WebSockets , как упоминал Jhect.