Обновление значений PHP и Ajax

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

Я пытаюсь динамически обновлять текст на странице PHP через AJAX. Но вместо текста, проходящего через разные промежутки времени, все это приходит сразу. Возможно, это неправильный подход.

index.html

 <html>
  <head>
    <title>Please Update!</title>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
     $(function(){
       $.post("hello.php", function(data){
           var success = $("#update");
           success.css("color", "green");
           success.html("> r "   data   ".");
       });
    });
</script>
      
  </head>
  <body>
<div id="update"></div>
  </body>
</html>
 

hello.php

 <?php
    echo "Hello Worldn";
    sleep(1);
    echo "rFoobarn";
    sleep(1);
    echo "rBazboon";
?>
 

Я бы хотел, чтобы текст перезаписал себя через одну секунду, но он сразу же вылетает в трубу. ;_;

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

1. Это не работает таким образом, echo выводит инструкции, ваш код ожидания просто приостанавливает выполнение скрипта. Вам может понадобиться переменная, а затем повторить эту переменную

2. вы должны выполнить любое из следующих действий… 1) вызывайте ajax снова и снова с параметром… поместите оператор if в hello.php … 2) создайте массив в hello.php … затем циклически выводите данные с таймаутом…

3. @Ainz-sama — Ах, у меня было предчувствие, что это будет не так просто, спасибо.

4. @AntonyJack: Блин, это больно просто читать. Есть ли какой-либо другой подход, который лучше работал бы для текста, поступающего с разными интервалами? И спасибо.

5. каковы ваши намерения… вывод осуществляется путем ожидания 1 секунды или вывода с интервалом в 1 секунду … что означает сторону php или сторону js…

Ответ №1:

Не уверен в этом, но это может помочь вам сделать…

в PHP

 <?php
        $result[] = "Hello Worldn";
        $result[] = "rFoobarn";
        $result[] = "rBazboon";
        print_r($result);
 ?>
 

в результате Ajax

 $.post("hello.php", function(data){
   for(let i = 0; i < data.length; i  ) {
      setTimeout(() => {
           // your stuff to do is here by 1 second interval...
           var success = $("#update");
           success.css("color", "green");
           success.html("> r "   data[i]   ".");
      }, 1000*i);
   }
});
 

Простое представление

 var data = ["Hello Worldn","rFoobarn","rBazboon"];
 for(let i = 0; i < data.length; i  ) {
    setTimeout(() => {
         console.log(data[i]);
    }, 1000*i);
 } 

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

1. Спасибо, как в вашем ответе, так и в другом, когда я пытаюсь это сделать, поведение в некоторой степени соответствует тому, что я ищу, но оно выводит только один символ за раз.

Ответ №2:

Как и предложил Энтони. Вы можете создать массив на php и закодировать его как Json, а затем создать settimeout() .

php

 $data = array("Hello World","Foobar","BazBoo");
echo json_encode($data);

 

jQuery ~ JavaScript

 
$.ajax({
    method: "GET",
    url: "hello.php",
    success: (res) => {
        for (let i = 0; i < res.length; i  ) {
            setTimeout(() => {
               // or use .html(res[i])
                $("#update").text(res[i]   "<br>");
            }, 1000 * i);

        }


    }
})
 

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

1. Спасибо, как в вашем ответе, так и в другом, когда я пытаюсь это сделать, поведение в некоторой степени соответствует тому, что я ищу, но оно выводит только один символ за раз.