1

私はjavascriptとjqueryの初心者で、jqueryで長いポーリングを行う効率的な方法を探していました。私はこのコードに出くわし、属性complete:に戸惑いました。「完全」の使用は認識していますが、このコードは再帰的な関数呼び出しになりますか?

(function poll(){
    $.ajax({ url: "server", success: function(data){
        //Update your dashboard gauge
        salesGauge.setValue(data.value);

    }, dataType: "json", complete: poll, timeout: 30000 });
})();

前もって感謝します。:)

4

2 に答える 2

1

OPの質問に答えるには:

"complete: poll" は関数を何度も呼び出します。これにより、かなりの帯域幅が発生し、サーバーのタイムアウトが発生する可能性があり、十分な数の人が使用するとサーバーの速度が低下する可能性があります.

于 2013-08-09T19:04:28.753 に答える
0

短いタイムアウトを使用して、現在のコール スタックが確実にクリアされるようにすることで、再帰を回避できます。

(function poll(){
    $.ajax({
        url: "server",
        success: function(data){
            //Update your dashboard gauge
            salesGauge.setValue(data.value);
        },
        dataType: "json",
        complete: function () {
            setTimeout(poll, 0);
        },
        timeout: 30000
    });
})();

これはpoll、現在の実行がクリアされた後、(おそらく) 次のイベントとして実行されます。つまり、jQuery はコールバックを実行し、complete最終的にコールバックから出るまですべてから戻ります。そのonreadystatechange時点で、JavaScript ランタイムがpoll再び実行されます (もちろん、別のイベントが入って最初にイベント キューに入らない限り)。

于 2013-08-09T19:04:02.170 に答える