0

再帰的な自己実行 JQuery スクリプトで、変数 ( tick)に初期値を設定する必要があります。以下のスクリプトを実行しようとすると、明らかに、JSON オブジェクトが返される値ではなく、ティックが 0 に戻ります。

    (function poll(){
        var tick = 0;
        setTimeout(function(){
            $.ajax({
                url: "/client-polling/" + tick,
                success: function(data) {
                    $( "#messagestack" ).append(data[2]);
                    tick = data[0]
                },
                dataType: "json",
                complete: poll
            });
        }, 10000);
    })();

また、何らかの理由でtickを宣言すると、関数は最初にポーリングする前に 10 秒間待機します。関数の外でtickを宣言しようとすると、ページ上の他のすべてのスクリプトがフリーズします。

最初にページが呼び出されたときに 0 に設定され、返された JSON オブジェクトから値が取得されるようにするには、どこで tick を宣言すればよいでしょうか?

更新: Eloquent Javascript の本と 7 つの Douglas Crockford のビデオのほとんどを読んで問題が何であるかを突き止めましたが、私は Javascript がシングルスレッドであることを認識していませんでした。私は他の人のコーディングをたくさん読んできましたが、通常、彼らのスクリプトは一度実行されて次のコードに進むということは、私にはまったく思い浮かびませんでした。私の「イベントループ」は、他のスクリプトの実行を停止していました。はい、関数自体が外部に変数を持つ必要があります。

私は最終的に iFrame (非公開の単一インターフェイス アプリケーションなのでセキュリティは問題ではありません) を使用して実行し、将来のビルドのために Web ワーカーを調べました。これまでの回答に感謝します。

4

1 に答える 1

0

関数の外で変数を設定しないのはなぜですか?

var tick = 0;
(function poll(){
    setTimeout(function(){
        $.ajax({
            url: "/client-polling/" + tick,
            success: function(data) {
                $( "#messagestack" ).append(data[2]);
                tick = data[0]
            },
            dataType: "json",
            complete: poll
        });
    }, 10000);
})();
于 2015-09-03T14:39:54.877 に答える