通过AJAX设置一些回声之间的延迟

时间:2016-09-24 09:05:41

标签: javascript php html ajax delay

所以我有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/的答案,以确保其有效。

6 个答案:

答案 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)

答案 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/>';
     }

     ?>