2011-12-05 54 views
1

我有一些Ajax响应问题。一切都很好,但我有一些奇怪的行为。 我正在做一个基于ajax的聊天。所以,我使用ajax请求响应来使这些东西起作用。它工作正常,尽管自从我开始使用2个轮询函数以来,有时会多次检索响应。 具体说明:我发送1个用于消息轮询的ajax包,以及1个用于用户列表轮询的ajax包。他们都定期发送!此外,它们在大约相同的时间以相同的频率发送。 有时他们有问题:对于一个请求发回多个响应。所有的软件包都有一个时间戳,并且它们在服务器端登录。在服务器上,软件包只进入一次(我确信基于日志记录,并同时使用多个浏览器)。浏览器做出响应大约3-4次。所有消息都完全相同,具有相同的时间戳。这通常发生在浏览器负载较重时。 我试图在标题中禁用缓存,但它也没有帮助。 请帮助解决有关问题的任何信息或想法。对一个请求有多个Ajax响应

+0

请出示您的代码以便帮助您 – Sedz

回答

1

为什么使用两个请求?将它们组合成一个“对我来说什么都是新的?”键入,并同时发回两个响应。您可以嵌入任意数据结构到一个JSON响应,所以它会很容易做:

$data = array(
    'user_query' => array(
     'status' => false // nothing new 
    ), 
    'mesage_query' => array(
     'status' => true // got some new messages 
     'messages' => array (
      0 => array(... new message #1 data ...), 
      1 => array(... new message #2 data ...) 
      etc... 
     ) 
    ) 
); 
echo json_encode($data) 

,然后在您的客户端脚本,在Ajax响应处理程序(假设的jQuery):

$.ajax(blah blah blah 
    .... 
    success: function(data) { 
     if (data['messages'].status) { 
       show_new_messages(data['messages']); 
     } 
     if (data['user_query'].status) { 
       show_new_users(data['user_query']); 
     } 
    } 
}); 
+0

您好! 看来这解决了我的问题。我使用XML和普通的JavaScript,所以花了一点时间。我认为学习JSON应该是有益的。据我所知,在正常的ajax响应中,不允许使用数组。 – Zulde

+0

json = javascript对象表示法。给出'x =等等等等等,json是等等等等。在PHP中,您可以使用json_encode生成该文件(并使用json_decode将json转换为本机php数据)。没有什么可以“学习”的,它只是一种在JavaScript和其他语言之间传输数据结构的方法。 –

+0

我明白了,我不知道。 我按照您的建议重写了代码,但它不能正常工作。有时候也会出现同样的问题。多次处理相同的响应... – Zulde