0

サーバーから特定のデータを取得するJSONリクエストを取得するクライアントがあり、サーバーに何かが来るとすぐに(サーバーは受信データをリッスンする10秒の時間間隔があります)、クライアントはデータを取得します。

問題は、クライアントが取得したすべてのデータがキューに留まり、時間間隔ごとに1つずつ出てくるため、時間間隔ごとに1つのデータしか表示されないことです。

サーバーからのすべてのデータを、時間間隔に関係なく表示する必要があります。どんな助けでも大歓迎です!

function getRequest(i) {
        $.getJSON(
                '/nextdocument',
                function(data) {

                    console.log(data.documentID + data.description +
                                data.price + data.instanceId + data.errorMessage);
                }
        );
        setTimeout(function() {
            getRequest(i);
        }, 11000);

}
4

2 に答える 2

1

「ライブデータフェッチ」の一般的な用語であるCometを確認してください。これには次のようなテクニックが含まれています

  • ポーリング(あなたがやっている)
  • 「ホールド・ザ・ライン」(適切な用語を忘れました)。サーバーは、サーバーに何か新しいものが到着するまで応答しないため、「プッシュ」をエミュレートします
  • Flash を使用してそのストリーミング機能を利用する

双方向の「プッシュ」データ転送用のWebSocketsもチェックしてください。

于 2012-05-03T08:46:22.937 に答える
0

OP は次のように書いています。

アドバイスをありがとう、私は次のコードでそれを解決しました:

function getRequest() {
    $.ajax({
        url: '/nextdocument',
        type: 'GET',
        async: true,
        cache: false,
        timeout: 11000, 
        success: function(data) {
            console.log(data.documentID + data.description +
                        data.price + data.instanceId);
            setTimeout(
                    'getRequest()',
                    1000
            );

            data["ok"] = data.ok;
            data["errorMessage"] = data.errorMessage;
            $.ajax(
                    {
                        url: "/customerdone",
                        data: JSON.stringify(data),
                        processData: false,
                        type: 'POST',
                        contentType: 'application/json'
                    }
            )
            //no document if no read in
            if (data.ok == "false") {
                console.log(data.errorMessage);
            }
        }
    })
}
于 2015-11-17T21:22:50.643 に答える