首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要帮助,使一个活的可更新的计时器使用jQuery和javascript

我需要帮助,使一个活的可更新的计时器使用jQuery和javascript
EN

Stack Overflow用户
提问于 2018-04-02 06:13:03
回答 1查看 28关注 0票数 0

几天来,我一直在堆栈溢出和其他编程网站/论坛上反复提出不同的问题,但我找不到问题的答案。

基本上我想做的是创建一个计时器,可以通过另一个网页实时更新。

由于服务器的限制,我不得不使用jQuery,javascript和PHP来做这件事,我不能使用任何更高级的语言。

我无法克服在我的代码中的某处有一些东西可以在NaN中进行转换的问题。

下面我将发布完整的前端代码。

有人能告诉我为什么我的代码不能工作吗?

代码语言:javascript
复制
var firstTimer=10;
var x=10;

jQuery.ajax({
    dataType: 'json',
    type: 'GET',
    url: "myapi.php",
    data: "",
    success: function (data){
        firstTimer= data.minuti;
        x= data.minuti;
    }
});
    

function startTimer(duration, display) {
    var timer = duration, minutes, seconds;
    setInterval(function () {
        minutes = parseInt(timer / 60, 10)
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.textContent = minutes + ":" + seconds;

        jQuery.ajax({
          dataType: 'json',
          type: 'GET',
          url: "myapi.php",
          data: "",
          success: function (data){
              x= data.minuti;
          }        
        });

        if(firstTimer != x){
            location.reload(true);            
        }

        if (--timer < 0) {
            alert("TIME EXPIRED");
        }
    }, 1000);
}
   



window.onload = function () {
    jQuery.ajax({
        dataType: 'json',
        type: 'GET',
        url: "myapi.php",
        data: "",
        success: function (data){
            firstTimer= data.minuti;
            x= data.minuti;
        }
        
    });

    minuti = Number(firstTimer);
    fiveMinutes = 60 * minuti,
        display = document.querySelector('#time');
    startTimer(fiveMinutes, display);
};
代码语言:javascript
复制
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div><span id="time"></span></div>

EN

回答 1

Stack Overflow用户

发布于 2018-04-02 06:41:49

从它的外观上看,您似乎已经遇到了异步的辉煌奇迹。您的代码的结构就好像它是按顺序从上到下运行的,然而,由于您使用异步请求而导致的,情况并非如此。请参考Eloquent Javascript了解更多,嗯,更有说服力的解释。

简而言之:对$.ajax()调用的回调将在周围的代码之后运行,包括它们后面的行。这意味着window.onload处理程序中的minuti = Number(firstTimer);实际上是在从服务器设置minuti之前执行的。确保所有代码仅在进行异步调用之后执行,也可能解决您的NaN问题。您可以在不同的位置执行几个console.log调用,以实际掌握所用变量的当前值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49603104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档