0

この例http://tomcat.apache.org/tomcat-7.0-doc/aio.htmlに従ってCometServletを作成しました。次に、JQueryを使用してデータを取得しようとしました。コードは次のとおりです。

$(function() {

        $.longPoll = function(url, success, error) {
        $.ajax({
            url : url,
            success: function(data, status) {
                $.longPoll(url, success, error);
                if (success) {
                    success(data, status);
                }
            },
            error: function(data, status) {
                $.longPoll(url, success, error);
                if (error) {
                    error(data, status);
                }
            }
        });

    };

    $.longPoll("./comet", "", function(data, status) {
        alert("success:" + data);
    }, function(data, status) {
        alert("error:" + data);
    });
});

問題は、成功関数がトリガーされないことです(FireBugコンソールでデータが来ることを確認できますが)。サーバーが応答ライターを閉じないために発生すると思いますが、それは長いポーリングの目標です:)

誰かがそれをどのように解決できるかについて何か考えを持っていますか?

4

2 に答える 2

1

jQueryxhr onreadystatechangeでチェックするには、を上書きする必要があります。例:readyState === 3.ajax()

var xhr = $.ajax({});
xhr._onreadystatechange = xhr.onreadystatechange;  // save original handler

xhr.onreadystatechange = function() {
     xhr._onreadystatechange();         // execute original handler
     if (xhr.readyState === 3) alert('Interactive');
};
于 2010-08-31T13:47:03.753 に答える
0

問題の解決策は、ロングポールストリームで新しいデータをチェックするためのタイマーを追加することです。すばらしい説明はここにあります:http://www.bennadel.com/blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm

みんな、ありがとう。

于 2010-09-01T10:11:16.613 に答える