没有运行其他代码行的延迟

时间:2017-10-16 20:19:36

标签: javascript jquery

在这段代码中我希望当.ch1类的div改变背景为answer_box_small_orange.png时,其他底部js行代码不会运行,并且没有ajax请求发送到3秒并且我使用

window.setTimeout(function () {}, 3000)

但它无法正常工作

首先,我请求并获取数据,这是好的

$.ajax({
    type:'post',
    url:'http://207.154.251.233:8039/app.php/question/get',
    data:JSON.stringify({apikey:'jwebdpqodp9fgkwjebfkdpqihdqlwkndqp'}),
    success:(function (response) {
        var x = response;
        $("#question").text(x.result.question);
        $(".op1").text(x.result.options["1"]);
    })
});

我在函数中插入了ajax代码和其他一些代码,因为我想每60秒运行一次

function myInterval () {
    $(".ch1").css('background-image','url(image/answer_box_small.png)');
    var clock;
    $(document).ready(function() {
        clock = new FlipClock($('.clock'), 60, {
            clockFace: 'Counter',
            autoStart: true,
            countdown: true,
            callbacks: {
                stop: function() {
                    $('#loading').fadeIn('5000');
                    $.ajax({
                        type:'post',
                        url:'http://79.175.166.98/',
                        data:JSON.stringify({apikey:'jwebdpqodp9fgkwjebfkdpqihdqlwkndqp'}),
                        success:(function (response) {
                            $('#loading').fadeOut('slow');
                            var x = response;
                            $("#question").text(x.result.question);
                            $(".op1").text(x.result.options["1"]);
                            var answer = x.result.answer;
                            if(answer == 1){
                                $(".ch1").css('background-image','url(image/answer_box_small_orange.png)');
                            }
                           window.setTimeout(function () {}, 3000);
                        })
                    });
                }
            }
        });
    });
}
myInterval();
window.setInterval(function(){
    myInterval();
}, 60000);

1 个答案:

答案 0 :(得分:0)

根据您告诉我的内容,我的解释是您拥有setTimeout()功能和setInterval()功能。 setTimeout()在开始时运行并将等待3秒。然后调用ajax函数每6秒创建一个新请求。您的问题似乎是在您创建第一个setTimeout()请求后重新运行了第一个AJAX,但您希望它停止。

取自W3

  

setTimeout返回值:一个数字,表示设置的计时器的ID值。将此值与clearTimeout()方法一起使用可取消计时器。

知道这一点,我们基本上可以取消setTimout()功能。在您的情况下,第一个setTimeout()

考虑一下,

var firstIntervalID = setTimeout(function() {
    $.ajax() {
    // First AJAX ran after three seconds.
    }
}, 3000);

clearTimeout(firstIntervalID);

// Your code resumes to set an interval every 60 seconds without having to worry about the three seconds set before
myInterval();
var secondIntervalID = setInterval(function(){
    myInterval();
}, 60000);

基本上,当您不再需要时,取消setTimeout()。你的申请可能与我写的不同,但主要的想法是一样的。使用setTimeout() ID上的setTimeout()取消/清除clearTimeout()