2012-02-01 68 views
3

我最近问了一个StackOverflow关于我的功能的问题,人们建议我使用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立即返回“Nothing has been said”,您根本不会从checkfornewmessages.php返回,直到有重要的东西返回。

换句话说,长时间轮询工作,有趣的东西在服务器端完成,可能在您的checkfornewmessages.php页面。您的JavaScript代码除了联系checkfornewmessages.php之外不需要做任何事情,并等待它回复。

+0

因此,我将不得不编写一个调用chekfornewmessages.php的不同函数。然后,就像我上面的函数一样,我可以将任何新的更改加载到div中。 – Eggo 2012-02-01 21:31:03

+2

@Eggo基本上,您对'load'的调用会联系'checkfornewmessages.php',然后停止并等待'checkfornewmessages.php'返回一个新消息。 “checkfornewmessages.php”不会返回,直到有人说了些什么。这可能需要很长时间,因此术语* long * polling。当有人说出一些话时,服务器立即返回。 – 2012-02-01 21:33:07

+0

这很有道理。 – Eggo 2012-02-01 21:34:26