0

私は自分のウェブサイトで次の機能を実行しています。これは基本的なタイマーとして機能し、i = 0 になると、else ステートメントに進む必要があります。次に、AJAX GET を実行し、単一の数値を $assetID に出力します。私の問題は、これが 2 回実行されているように見えることです。アラートが 1 つしか届かないはずなのに、アラートが 2 つ届きます。私が間違っているかもしれないことについて何か考えはありますか?

var i = 3;
function timer() {

    if (i <= 3 && i > 0) {

        $('#count').fadeIn();
        $('#count').attr('src', 'images/'+i+'.png');

        setTimeout(timer, 1000);

        i--;

    } else {

            //var intProcessingTimeout = 0;

            $.ajax({
                type: "GET",
                url: "index_ajax.php",
                data: "action=submit_info",
                complete: function(data){
                        //console.log(data);

                        i = 3;
                        $assetID = data.responseText.replace(/ /g,'');
                        //$assetID = $.trim($(this).text());

                        alert($assetID);


                        $('#get-ready, #count, #swf_file, #back').fadeOut('slow', function() {

                            $('#preview-poster').fadeIn();
                            $('.your_poster').fadeIn();
                            checkAssetStatusNew();

                        });


                }
          });

    }
}

timer()ここで呼び出されています:

$(".take_photo").click(function () {


    $('#preview-page, #back').fadeOut('slow', function() {

          $('#get-ready').fadeIn();
          $('#swf_file').fadeIn();

          //setTimeout(timer, 1000); //DOESNT WORK HERE - RUNS TWICE

    });

         setTimeout(timer, 1000); // WORKS HERE FOR SOME REASON


});

編集:setTimeout(timer, 1000);fadeOut関数の外側を移動すると、本来の方法で機能するようです。フェードアウト関数内で 2 回実行される理由がわかりません。

4

1 に答える 1

0

タイマーブロックは正常に動作しています...ログを試しました...

Timer start...
If block...
Timer start...
If block...
Timer start...
If block...
Timer start...
Else block... 

まさに予想通り。

交換してみる

complete: function(data){...}

success: function(data){...},
error: function(err){...)
于 2013-01-03T15:38:31.330 に答える