Ajax并不总是被调用

时间:2015-09-18 15:55:50

标签: php jquery ajax

好的,我有一个按钮' up'当按下时,从8开始倒计时,当它达到0时,对update.php进行ajax调用,然后更新sql表。 update.php正在运行。

 <input type='button' id='countdw' value='Wait 8s'  class='btn btn-primary disabled'>

这是有效的,只是每次倒计时到达时都没有。这段代码似乎每次都没有执行

$.ajax({
        url: "update.php",

这是代码

<script>
                var secsLeft = 8;
                setInterval(function(){
                    secsLeft--;
                    if(secsLeft > 0){
                        $('#countdw').val('Wait ' + secsLeft + 's');
                    } else if(secsLeft == 0){
                        $('#countdw').removeClass('disabled');
                        $('#countdw').val('UP');
                        $('#countdw').attr("onclick","myfunction()");

                    }
                }, 1000);        
            </script>

            <script>
                count=0;
                function myfunction(){
                    if(mycount!=0 && mycount%25==0){

                    }else{
                            var secsLeft = 8;
                            setInterval(function(){
                                secsLeft--;
                                if(secsLeft > 0){
                                    $('#countdw').addClass('disabled');
                                    $('#countdw').val('Wait ' + secsLeft + 's');
                                } else if(secsLeft == 0){
                                    $('#countdw').removeClass('disabled');
                                    $('#countdw').val('UP');
                                    $('#countdw').attr("onclick","myfunction()");

                                    $.ajax({
                                url: "update.php", 
                                data:{'user':'<?php echo $subid ?>','data':'<?php echo $key ?>'},
                                success: function(result){

                                }
                            });

                                }
                            }, 1000);

                    }
                    up();
                }
            </script>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

<强>欠或相等的

# instead of
#     if(secsLeft == 0){
# test if it's less-or-equal zero
if(secsLeft <= 0){

在JavaScript事件中,有时会堆积起来,然后出现竞争条件,这似乎不太可能。在你的情况下,可能是secsLeft在检查相等性之前减少了两次。

是否已发送请求?

确保未发送AJAX请求。每个浏览器都有开发人员工具,您可以在其中检查所有流量。确保没有错误消息作为对您的AJAX请求的响应。

除此之外,您应该将console.log(..)添加到success()的{​​{1}}和error()个功能中,以查看幕后是否发生了某些事情。

之后发生了什么?

您正在调用方法$.ajax。确保此方法不会阻止您的AJAX调用,例如通过触发重定向。

答案 1 :(得分:0)

首先,我要你原谅我的英语。我无法真正了解您的当务之急,但在查看您的代码时,变量mycount的作用是什么?它在何处定义?当setInterval()与第一个脚本块一起运行时,secsLeft将始终持续减少。因此,每次secsLeft<= 0时,您都会在&#34; 其他&#34;将要执行的块,也许它不是所需的结果。这可以通过在secsLeft<=0时停止定时功能来优化。然后你会有类似的东西:

 <script>
            var secsLeft = 8;
            var timedDecreaseID = setInterval(function(){
                secsLeft--;
                if(secsLeft > 0){
                    $('#countdw').val('Wait ' + secsLeft + 's');
                } else { //secsLeft <= 0
                    $('#countdw').removeClass('disabled');
                    $('#countdw').val('UP');
                    $('#countdw').attr("onclick","myfunction()");

                    clearInterval( timedDecreaseID );//will stop this timed function
                }
            }, 1000);        
        </script>  

在第二个脚本块中可能存在&#34; collision &#34;在第一个脚本块中实现的setInterval和之前的另一个之间。这也解释了为什么我建议在实现相关条件后停止第一个。另一个注意事项是,如果您进行测试secsLeft <=0,每次secsLeft将在值0下减少时,您将收到ajax调用,如果考虑setInterval,这将始终发生}呼叫没有停止。所以,除非是期望的结果,我认为最好做一些像:

<script>
            count=0;
            function myfunction(){
                if(mycount!=0 && mycount%25==0){

                }else{
                        var secsLeft = 8;
                        timedDecreaseID = setInterval(function(){
                            secsLeft--;
                            if(secsLeft > 0){
                                $('#countdw').addClass('disabled');
                                $('#countdw').val('Wait ' + secsLeft + 's');
                            } else {//secsLeft <= 0
                                $('#countdw').removeClass('disabled');
                                $('#countdw').val('UP');
                                $('#countdw').attr("onclick","myfunction()");

                                $.ajax({
                            url: "update.php", 
                            data:{'user':'<?php echo $subid ?>','data':'<?php echo $key ?>'},
                            success: function(result){

                            }
                        });

                        clearInterval( timedDecreaseID );//will stop this timed function
                            }
                        }, 1000);

                }
                up();
            }
        </script>