#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. Спасибо, как в вашем ответе, так и в другом, когда я пытаюсь это сделать, поведение в некоторой степени соответствует тому, что я ищу, но оно выводит только один символ за раз.