javascript — установить задержку между некоторыми эхо через AJAX

Таким образом, у меня есть форма HTML отправка данных через ajax на php, как:

index.html

<script type="text/javascript">
$("#button").click(function(){
var ajaxname=$("#name").val();
$.ajax({
method:"POST",
url:"some.php",
data:"name="+ajaxname,
success:function(data){
$("#formresult").html(data);
}
});
}
</script>

<form>
<input type="text" name="name" id="name">
<input id="button" type="button" value="send"/>
</form>
<div id="formresult"></div>

и PHP-файл, как:

some.php

<?php

$name = $_POST['name'];

if($name == "mahdi"){
echo 'true' . '<br/>';
echo 'welcome' . '<br/>';
echo 'have good time!' . '<br/>';
}
else{
echo 'false' . '<br/>';
echo 'wrong name' . '<br/>';
}

?>

Когда отправка формы и обратный вызов AJAX успешны, покажите все эхо в один момент и вместе. но я хочу эхозадержка во времени«Например, 2 секунды между любым эхо.

Я использовал «сна (2);«в php»SetTimeout» а также «для циклав JavaScript, но никто не работает.

Пожалуйста, кто-нибудь знает ответ, вставьте его в https://jsfiddle.net/ чтобы увидеть, как это работает.

0

Решение

Здесь много путаницы. Если я правильно понимаю, вы хотите, чтобы каждый из эхо-сигналов выполнялся с задержкой в ​​2 секунды между ними, в результате чего текст каждого эха отображался один за другим на странице?

Если это так, вы не можете использовать один скрипт PHP с таким набором эхо. Вам нужно будет отправить обратно массив строк, и JavaScript будет использовать setInterval для отображения по одной за раз.

Редактировать например:

PHP будет что-то вроде:

<?php
header('Content-Type: application/json');
$name = $_POST['name'];

if($name == "mahdi"){
echo json_encode(array('true', 'welcome', 'have good time!'));
} else {
echo json_encode(array('false', 'wrong name'));
}

И JS нравится:

$("#button").click(function(){
var ajaxname = $("#name").val();
$.ajax({
method: "POST",
url: "some.php",
dataType: "json",
data: "name=" + ajaxname,
success: function (data) {
var index = 0;
var intervalId = setInterval(function () {
$("#formresult").append('<p>' + data[index] + '</p>');
index = index + 1;
if (index === data.length) {
clearInterval(intervalId);
}
}, 2000);
}
});
}

Это устанавливает setInterval после успешного ответа AJAX. После того, как все сообщения добавлены в #formresult, интервал очищается.

1

Другие решения

Когда вы используете Ajax, запрос отправляется на сервер и ожидает, пока сервер выполнит работу и вернет ответ. Вы не можете получить результат в отдельных частях.

Вы должны использовать Socket, чтобы делать такие вещи.

0

Чтобы сделать задержку в PHP, сделайте:

<?php
sleep(1);
$name=$_POST['name'];

if($name == "mahdi"){

echo 'true' . '<br/>';

echo 'welcome' . '<br/>';

echo 'have good time!' . '<br/>';
}
else{
echo 'false' . '<br/>';
echo 'wrong name' . '<br/>';
}

?>

Но для использования Javascript:

<script type="text/javascript">

$("#button").click(function(){

var ajaxname=$("#name").val();
$.ajax({
method:"POST",
url:"some.php",
data:"name="+ajaxname,
success:function(data){setTimeout(function(data){
$("#formresult").html(data);

}});
},2000,data)};
</script>

<form>
<input type="text" name="name" id="name">
<input id="button" type="button" value="send"/>
</form>
<div id="formresult"></div>

Имейте в виду, что при использовании обоих фрагментов вы получите задержку в 4 секунды.

0

Пожалуйста, пройдите это. Ты можешь использовать setTimeout,

https://jsfiddle.net/687qgqz0/?utm_source=website&utm_medium = код вставки&utm_campaign = 687qgqz0

0

Вы можете вернуть массив из phpитерация возвращаемого массива $.each()использовать .delay(), .queue(), в success задержать две секунды между каждым вызовом .append()

<form>
<input type="text" name="name" id="name">
<input id="button" type="button" value="send" />
</form>
<div id="formresult"></div>
<script type="text/javascript">
var arr = ["true<br/>", "welcome<br/>", "have good time!<br>", "false<br/>", "wrong name<br>"];
$("#button").click(function() {

var ajaxname = $("#name").val();
$.ajax({
method: "POST",
url: "/echo/json/",
data: {
json: JSON.stringify(arr)
},
dataType: "json",
success: function(data) {
$.each(data, function(index, html) {
$("#formresult").delay(2000)
.queue(function(next) {
$("#formresult").append(html);
next()
})
})
}
});
})

</script>

jsfiddle https://jsfiddle.net/berhth9r/

0

используйте код ниже

<?php

$name="mahdi";

if($name == "mahdi"){

echo 'true' . '<br/>';
sleep(2);
echo 'welcome' . '<br/>';
sleep(2);
echo 'have good time!' . '<br/>';
}
else{
echo 'false' . '<br/>';
echo 'wrong name' . '<br/>';
}

?>
-1
По вопросам рекламы [email protected]