1

特定のページの私のアプリケーションでは、以下のように AJAX 関数呼び出しを継続的に使用しています。

<script type="text/javascript">  
        $(document).ready(function(){   


            setInterval(function() {
                 $.ajax({  
                    url:'clmcontrol_livematchupdate',
                    type:'post', 
                    dataType: 'json',  
                    success: function(data) {  


                        $('#lblbattingteam').html(data.battingnow);
                        $('#lblscore').html(data.score);
                        $('#lblwickets').html(data.wickets);
                        $('#lblovers').html(data.overs);
                        $('#lblballs').html(data.balls);
                        $('#lblextras').html(data.extras);
                        $('#lblrr').html(data.runrate);

                        $('#lblbowlingteam').html(data.bowlingnow);
                        $('#lblbowler').html(data.currentbowler);
                        $('#lblbowlerovers').html(data.bowlerovers);
                        $('#lblbowlerballs').html(data.bowlerballs);
                        $('#lblrunsgiven').html(data.runsgiven);
                        $('#lblextrasgiven').html(data.extrasgiven);
                        $('#lblwicketstaken').html(data.wicketstaken);
                        $('#lblecon').html(data.econ);


                    }  
                });  
            }, 4000);
        });  
    </script>  

とにかく、最初の試行ではアプリケーションは正常に動作し、期待どおりに値が更新されましたが、数回試行した後、値の更新に苦労し、それ以上の更新は行われませんでした。連続した ajax 呼び出しにより、関数がシステムを遅くするためですか?

4

2 に答える 2

1

setInterval() を使用しないことをお勧めします。最初のリクエストが完了せずに別のリクエストを開始した場合、複数のリクエストが共有リソースを消費し、互いに枯渇する状況に陥る可能性があるためです。最後のリクエストが完了するまで次のリクエストのスケジュールを待つことで、この問題を回避できます。

ちょうど試して:

(function ajaxInterval() {
      $.ajax({  
                url:'clmcontrol_livematchupdate',
                type:'post', 
                dataType: 'json',  
                success: function(data) {  


                    $('#lblbattingteam').html(data.battingnow);
                    $('#lblscore').html(data.score);
                    $('#lblwickets').html(data.wickets);
                    $('#lblovers').html(data.overs);
                    $('#lblballs').html(data.balls);
                    $('#lblextras').html(data.extras);
                    $('#lblrr').html(data.runrate);

                    $('#lblbowlingteam').html(data.bowlingnow);
                    $('#lblbowler').html(data.currentbowler);
                    $('#lblbowlerovers').html(data.bowlerovers);
                    $('#lblbowlerballs').html(data.bowlerballs);
                    $('#lblrunsgiven').html(data.runsgiven);
                    $('#lblextrasgiven').html(data.extrasgiven);
                    $('#lblwicketstaken').html(data.wicketstaken);
                    $('#lblecon').html(data.econ);


                },
                complete: function() {
                  // Schedule the next request when the current one has been completed
                  setTimeout(ajaxInterval, 4000);
                }  
            });
})();
于 2013-11-14T18:13:56.260 に答える
0

ここには潜在的な問題があり、デバッガーからネットワーク呼び出しを確認した場合は明らかです。ajax 呼び出しのノンブロッキング非同期動作により、同時に ajax 呼び出しを行う可能性があります。ブラウザによっては、同時に非常に多くの呼び出しを行うことが許可されているため、キューに入れられます. このような状況では、実行順序も保証されません。

あなたの状況async: falseでは、ajax オプションを設定します。setInterval コールバックで実行することにより、すでに非インターフェイス ブロッキング動作を取得しています。setInterval はメソッド呼び出しの間にタイマーを適用するだけなので、特定の時間に複数の ajax 呼び出しが動作することはありません (これが問題の原因である可能性があります)。

于 2013-11-14T18:11:56.410 に答える