2012-02-01 19 views
3

最近、私はStackOverflowの質問に私の機能について質問し、人々はAjax Long Pollingを使うことを勧めました。私は過去2週間にわたってこのテーマを研究し、基本的なロングポーリングコードを書こうとしましたが、そのどれも成功しておらず、私は何もすることができません。ここでAjaxロングポーリング

は、私の基本的な機能である:

<script language='javascript' type='text/javascript'> 
    var interval=self.setInterval("checkformessages()",4000) 
    function checkformessages() { 
    $('#incomingmessages<?php echo $otherchatuser ?>').load('checkfornewmessages.php?username=<?php echo $username; ?>&otherchatuser=<?php echo $otherchatuser; ?>'); 
    } 
    </script> 

誰かが基本的なロングポーリング機能にこれを回す、あるいは単に私がそこに取得する必要があり、パスに指示する方法を教えすることができるだろう。どんな助力も非常に感謝しています。ありがとう!

答えて

6

通常(長いポーリングを使用しない場合)、JavaScriptコードはサーバーにリクエストを行い、サーバーは情報をすぐに返します。しかし、あなたのサーバーは、すぐに何か重要な意味を持つとは限りません。あなたの例(チャットと思われる)では、あなたがチャットしている相手は、checkfornewmessages.phpにリクエストすると何も言わなかったかもしれません。したがって、JavaScriptクライアントがサーバーに何を言っているかを尋ねると、サーバーには何も返されません。「何も言われていません。

checkfornewmessages.phpの代わりに長いポーリングを使用すると、「何も言われていません」とすぐに戻ります。返すことが重要なことがあるまで、checkfornewmessages.phpから戻ってこないだけです。

つまり、ロングポーリングを有効にするには、恐らくあなたのcheckfornewmessages.phpページのサーバー側で面白いことが行われます。あなたのJavaScriptコードは連絡先checkfornewmessages.php以外の何もする必要はなく、応答するのを待つ。

+0

だから私はchekfornewmessages.phpを呼び出す別の関数を書く必要があります。上記の関数のように、divに新しい変更をロードできます。 – Eggo

+2

@Eggo基本的に、 'load'の呼び出しは' checkfornewmessages.php'に連絡し、 'checkfornewmessages.php'が新しいメッセージで戻るのを止めて待ちます。 'checkfornewmessages.php'は誰かが何かを言うまで返りません。これは長い時間かもしれないので、* long *ポーリングという言葉です。誰かが何かを言うと、サーバーはすぐに戻ります。 –

+0

それは理にかなっています。 – Eggo

関連する問題