2009-04-30 49 views
2

私は基本的なプッシュメッセージングシステムを書いています。小さな変化が原因で、正しく機能しなくなりました。私に説明させてください。私の元のバージョンでは、私はこのような文書何かの中にコードを配置することができました:ページの本文にjQuery .getJSON()接続を開いたままにしておきますか?

<head> 
    ...text/javascript"> 
    $(document).ready(function(){ 
    $(document).ajaxStop(check4Updates); 
    check4Updates(); 
    }); 

    function check4Updates(){ 
    $.getJSON('%PATH%', callback); 
    }; 
... 
</head> 

これはうまく働いていたとしても、オープン、それは後に言うのサーバリターンヌルを(接続を維持します2分のタイムアウト)。 getJSON関数を無期限に何度も呼び出し続けます。ハッピーパンダ。

ここで、タグの間にコードセグメントを配置する必要があります。 $(document).ready()関数へのアクセスはほとんど機能しません。

<body> 
... 
check4Updates(); 
$("body").ajaxStop(check4Updates); 
... 
</body> 

これはしばらくの間動作します。その後まもなく、check4Updatesの呼び出しを停止し、無限ループに入り、100%のプロセッサ時間を使用します。

私は、check4Updatesがページが閉じられるまで繰り返し呼び出されるようにしようとしています。誰かが私の単純な変更がもはや期待どおりに機能しなくなった理由についての洞察があれば、教えてください。読んで助けてくれてありがとう、ありがとう。あなたがあなたのバックエンドを打って保管しないことを確認し、どのような理由のためにポーリングを使用しなければならないので、もし

よろしく、 ヴァン・グエン

答えて

6

ええ、あなたはそのループを使いたいとは思わないでしょう。クライアントをロックすることはもちろん、DOSingです。

十分なシンプルな、ポーリングプラグインを作成:

出典:http://web.archive.org/web/20081227121015/http://buntin.org:80/2008/sep/23/jquery-polling-plugin/

使用方法:それをバックアップする

$("#chat").poll({ 
    url: "/chat/ajax/1/messages/", 
    interval: 3000, 
    type: "GET", 
    success: function(data){ 
     $("#chat").append(data); 
    } 
}); 

コード:

(function($) { 
    $.fn.poll = function(options){ 
     var $this = $(this); 
     // extend our default options with those provided 
     var opts = $.extend({}, $.fn.poll.defaults, options); 
     setInterval(update, opts.interval); 

     // method used to update element html 
     function update(){ 
      $.ajax({ 
       type: opts.type, 
       url: opts.url, 
       success: opts.success 
      }); 
     }; 
    }; 

    // default options 
    $.fn.poll.defaults = { 
     type: "POST", 
     url: ".", 
     success: '', 
     interval: 2000 
    }; 
})(jQuery); 
+2

ええ、またはのように聞こえます彼は彗星を望んでいる。 http://plugins.jquery.com/project/Comet –

0

タイムアウトを使用しますが、ループのこれらのタイプは、本当に悪い考えです。

0

次のいずれかが必要にaltCognitoで説明されているポーリング方法に変更するか、またはcometを使用することができます。サーバーからクライアントにデータをプッシュするように設計されています。あなたのニーズに応じて、Jetty(Javaの場合)やTwisted(Pythonの場合)、WebSync(ASP.NET/IIS)のようなものを使用できます。

関連する問題