0

ここで、ループ (再帰関数) 遅延の例を見つけ、独自の目的で使用しました。問題は、div の追加が成功したときにサイクルを停止する必要があることですが、ここでは再帰関数であるため、break でエラーがスローされます。

私はこのようなことを試しました:

(function myLoop(i){
    console.log($("input[name='show']").is(':visible'));
    if($("input[name='show']").is(':visible'))
        return false;
    setTimeout(function(){
        $.getScript('index.php?ping=true', function(data){
            if(ping){
                $('#input').append('<input width="320" type="image" height="240" border="0" src="http://'+url+':'+port+'/?up" name="show">');
            }
        });
        if (--i) myLoop(i);
    }, 7000)
})(10);

ただし、2番目のdivが追加された後にのみ停止します。私が理解しているように、どういうわけかifでコールバックを使用する必要がありますか?

ここに画像の説明を入力

更新: 問題を自分で解決しました。if (--i) myLoop(i); を追加しました。取得スクリプトに

4

2 に答える 2

1

より良いアプローチは、実際に失敗した場合に関数を再度呼び出し、制限または同様のものを設定することです。

var i=0, limit=10;

function getSomething() {
    if (!$("input[name='show']").length) {
        var XHR = $.getScript('index.php?ping=true');
        XHR.done(function(data){
            if(ping){
                $('#input').append('<input width="320" type="image" height="240" border="0" src="http://'+url+':'+port+'/?up" name="show">');
            }
        }).fail(function() {
            if (i<limit) setTimeout(getSomething, 7000);
            i++;
        });
    }
});    

setTimeout(getSomething, 7000);

要素が存在するかどうかを確認する必要はありません。関数が失敗しなくなるまでおそらく存在しないためです。また、どこにも定義されていないため、変数ping、url、およびポートをどこから取得していますか

于 2012-08-14T07:20:01.977 に答える
0

setTimeoutyourと useへの参照を保存する必要がありますclearTimeout

var timeout = setTimeout(function(){
    if (success) {
        clearTimeout(timeout); 
    }
});
于 2012-08-14T07:07:17.643 に答える