0
<script>
    $(document).ready(function(){
        ajaxcall();
    });
    function ajaxcall(){
    $.ajax({
          url: 'test.php',
            success: function(data) { 
                data = data.split(':');
                $('#hours').html(data[0]);
                $('#minutes').html(data[1]);
                $('#seconds').html(data[2]);
                ajaxcall();
            }
        });
    }
    </script>
    <span id="hours">0</span>:<span id="minutes">0</span>:<span id="seconds">0</span>

このコードでは、ajax関数を成功と呼んだので、無限ループになります。何か問題がありますか?

4

2 に答える 2

2

これにより、各呼び出しが呼び出しスタックに保存されるため、最終的にブラウザのメモリが不足し、クラッシュします。私は間違っていた; コールバックは非同期であるため、制御は親関数を離れます。時刻を更新しようとしている場合は、代わりに次のようなことを行うことをお勧めします。

$(document).ready(function(){
    setInterval(ajaxcall, 1000); //calls ajaxcall every 1000 microseconds
});

function ajaxcall(){
   $.ajax({
        url: 'test.php',
        success: function(data) { 
            data = data.split(':');
            $('#hours').html(data[0]);
            $('#minutes').html(data[1]);
            $('#seconds').html(data[2]);
        }
   });
}
于 2012-06-07T18:15:13.917 に答える
1

悪いことは何も起こりません。ajax呼び出しを行い、それが戻るのを待ってから、永遠に別の呼び出しを行います。それ自体には何の問題もありません。サーバー側の操作が重すぎないように注意してください。また、転送しすぎて帯域幅を浪費しないように注意してください。

停止できるようにしたい場合は、呼び出しを続行するかどうかを定義する変数を作成し、いつでもオフにすることができます。

var keepCalling = true;

function ajaxCall() {
    if (!keepCalling)
        return;

    //ajax call...
}

に設定keepCallingするfalseと、現在の通話が完了した後に通話が停止します。

于 2012-06-07T18:15:13.093 に答える