所以我有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秒。
我在php中使用了“ sleep(2); ”,在JavaScript中使用了“ setTimeout ”和“ for loop ”,但没有人不起作用。
请有人知道https://jsfiddle.net/的答案,以确保其有效。
答案 0 :(得分:1)
这里有很多困惑。如果我理解正确,你希望每个回声在它们之间延迟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);
}
});
}
在成功的AJAX响应之后设置setInterval。将所有消息附加到#formresult后,将清除该间隔。
答案 1 :(得分:0)
当您使用Ajax时,发送到服务器并等待服务器的请求执行作业并返回响应。您无法将结果分成几部分。
你必须使用Socket来做这些事情。
答案 2 :(得分: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秒的延迟。
答案 3 :(得分:0)
请仔细阅读。您可以使用setTimeout
。
https://jsfiddle.net/687qgqz0/?utm_source=website&utm_medium=embed&utm_campaign=687qgqz0
答案 4 :(得分: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/
答案 5 :(得分:-1)
使用下面的代码
<?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/>';
}
?>