Таким образом, у меня есть форма 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/ чтобы увидеть, как это работает.
Здесь много путаницы. Если я правильно понимаю, вы хотите, чтобы каждый из эхо-сигналов выполнялся с задержкой в 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, интервал очищается.
Когда вы используете Ajax, запрос отправляется на сервер и ожидает, пока сервер выполнит работу и вернет ответ. Вы не можете получить результат в отдельных частях.
Вы должны использовать Socket, чтобы делать такие вещи.
Чтобы сделать задержку в 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 секунды.
Пожалуйста, пройдите это. Ты можешь использовать setTimeout
,
https://jsfiddle.net/687qgqz0/?utm_source=website&utm_medium = код вставки&utm_campaign = 687qgqz0
Вы можете вернуть массив из 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/
используйте код ниже
<?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/>';
}
?>