簡體   English   中英

Ajax並不總是被調用

[英]Ajax not always being called

好的,所以我有一個按鈕“ up”,當按下該按鈕時,將從8開始倒數,當它達到0時,將對update.php進行ajax調用,進而更新sql表。 update.php正在工作。

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

這是可行的,只是不是每次倒數達到0時才執行。這部分代碼似乎並非每次都執行

$.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>

任何幫助將不勝感激。

少-或相等

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

在JavaScript中,事件有時會堆積起來,然后出現競態條件,這似乎不太可能。 在您的情況下,可能是secsLeft減少了兩次,然后檢查是否相等。

是否發送了請求?

確保未發送AJAX請求。 每個瀏覽器都有開發人員工具,您可以在其中查看所有出站流量。 確保沒有錯誤消息響應您的AJAX請求。

除此之外,還應該在$.ajaxsuccess()error()添加console.log(..) ,以查看是否正在發生幕后事件。

之后發生什么事?

您正在調用up()方法。 確保此方法不會阻止您的AJAX調用,例如通過觸發重定向。

首先,我要你原諒我的英語。 我無法真正引起您的注意,但是當看到您的代碼時,變量mycount的作用是什么,它在哪里定義? setInterval()與第一個腳本塊一起運行時, secsLeft將始終連續減小。 因此,每當secsLeft <= 0您將在“ else ”塊中有要執行的指令,這可能不是期望的結果。 這可以通過在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>  

在第二個腳本塊中,實現的setInterval與第一個腳本塊中的前一個之間可能發生“ 沖突 ”。 這也解釋了為什么我建議在實現相關條件后停止第一個操作。 另一個secsLeft <=0是,如果使測試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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM