使用1秒间隔重试Ajax请求5次

时间:2017-09-11 23:35:35

标签: php jquery ajax

我有一个verify.php文件,它将检查数据库条目并返回1(如果存在)或0(如果它不存在)。但是这个数据库将在0到5秒之间更新。因此,至少在前5秒内,返回值可能为0。

在另一个页面中,我想用AJAX检查verify.php的返回,并在每次检查之间以1秒的间隔重试5次。如果在5秒检查中的任何时间,它收到1,退出检查循环并显示成功消息。

我写过这篇文章,但它只检查过一次而且我不知道如何检查x次:

table

非常感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:2)

  • 将您的AJAX通话转换为功能
  • 有一个跟踪您有多少次尝试的变量
  • 如果需要,可以在自己的回调中调用您的AJAX函数,延迟时间为1秒,也就是说,您没有用尽您的尝试并且状态错误。

代码

BindProperty

答案 1 :(得分:0)

没有为你编写代码,这里有一个"蛮力"方法......

将ajax调用包装在函数中 声明"可以停止"以及该函数之外的一个称为变量的变量 每次调用函数时,都会增加时间调用变量 设置"可以停止"你的ajax响应代码中的变量

创建一个看起来递归的函数; 它检查"可以停止"变量和保释一旦设定 它调用你的ajax函数 如果计数通过,它会检查时间调用变量和保释 它调用setTimeout来调用自身;

使用window.setTimeout(或者ajax包装器)等待第二次

答案 2 :(得分:0)

使用window.setInterval(function , timeInMillis)功能为ajax查询计时。使用布尔值检查特定查询何时返回。

只有当它返回时,计时器才会进行新查询。

祝你一切顺利。

  <script type="text/javascript">
      var queryOn = false;
       var interval;
$(function (){

    var attempts = 0;
    interval = window.setInterval(
                    function () {
                        if (queryOn === false) {
                            queryOn = true;


                            var url = "...url";

                            $.ajax({
                                type: 'POST',
                                url: url,
                                success: function (msg) {

                                    queryOn = false;
                                    if (msg === 1) {
                                        $('#status').text('success');
                                        window.clearInterval(interval);
                                    } else {
                                        $('#status').text('failed');
                                    }


                                    if(attempts === 5){
                                         window.clearInterval(interval);
                                    }
                                    ++attempts;
                                }
                            });
                        }
                    }, 5000);

});





        </script>