如何使用 PHP 和 Jquery 开发像 facebook 这样的警报系统?

Posted

技术标签:

【中文标题】如何使用 PHP 和 Jquery 开发像 facebook 这样的警报系统?【英文标题】:How to develop alert system like facebook using PHP and Jquery? 【发布时间】:2011-04-14 06:53:15 【问题描述】:

如何开发像 Facebook 一样的警报系统,其中用户 A 添加用户 B,用户 B 将在标题的“好友请求”部分中获得一些数字,如下图所示。我怎样才能开发出这样的东西? 我们如何获得这样的数字?如何获得 php 和 JQuery 中的代码?

【问题讨论】:

【参考方案1】:

我想你想要一种提醒用户 A 的方法,当用户 B '朋友'他/她而不需要刷新页面时?

这需要“AJAX”。 AJAX 代表异步 javascript 和 XML,但现在这是一个重载的术语,实际交换数据结构通常使用 JSON 而不是 XML。 JSON 是 JavaScript 对象表示法。无论如何,这个想法是您的网页(无需刷新)可以定期调用您的服务器以获取新的或更新的信息以更新显示。使用 PHP 和 jQuery,您首先需要在页面上设置 AJAX 调用,如下所示:

$(function()  // on document ready

function updateAlerts() 
   $.ajax(
      url : "/check.php",
      type : "POST",
      data : 
         method : 'checkAlerts'
      ,
      success : function(data, textStatus, XMLHttpRequest) 
         var response = $.parseJSON(data);

         // Update the DOM to show the new alerts!
         if (response.friendRequests > 0) 
            // update the number in the DOM and make sure it is visible...
            $('#unreadFriendRequestsNum').show().text(response.friendRequests);
         
         else 
            // Hide the number, since there are no pending friend requests
            $('#unreadFriendRequestsNum').hide();
         

         // Do something similar for unreadMessages, if required...
      
   );
   setTimeout('updateAlerts()', 15000); // Every 15 seconds.


);

这将每 15 秒向您的服务器发出请求,该请求位于与网页来源相同的域中的 url /check.php 上。 PHP 应该查询您的数据库并返回未读好友请求的数量。也许是这样的:

<?php

   function isValid(session) 
      // given the user's session object, ensure it is valid 
      // and that there's no funny business
      // TO BE IMPLEMENTED
   

   function sanitize(input) 
      // return CLEAN input
      // TO BE IMPLEMENTED
   

   // Be sure to check that your user's session is valid before proceeding, 
   // we don't want people checking other people's friend requests!
   if (!isValid(session))  exit; 

   $method = sanitize($_POST['method']);

   switch ($method) 
      case 'checkAlerts' :
         // Check DB for number of unread friend requests and or unread messages
         // TO BE IMPLEMENTED

         $response = ['friendRequests' => $num_friend_requests,
                      'messages' => $num_unread_messages ];

         return json_encode( $response );
         exit;

      case 'someOtherMethodIfRequired' :
         // ...
         exit;
   
?>

【讨论】:

我不明白你能解释一下吗? 我一直想知道保持调用服务器的适当持续时间,在 facebook 中它会立即发生,只有几秒的延迟,他们是否每 3 秒调用一次 ajax?这不会是浏览器和服务器的负担吗? 实际上,FB 和其他人很可能实际上在较新的浏览器中使用 WebSockets,这允许他们推送更新而不是使用轮询(就像 AJAX 那样)。它还为他们节省了构建和销毁大量 Web 服务器进程的开销(在大多数情况下,每个 AJAX 请求一个)。 足够完美,不多也不少。 如果 Facebook 已经实施了这个解决方案,那么他们的数据中心一定有得克萨斯州那么大。

以上是关于如何使用 PHP 和 Jquery 开发像 facebook 这样的警报系统?的主要内容,如果未能解决你的问题,请参考以下文章

在jquery中附加php

JQuery DataTables Columns 使用数据自动初始化

如何使用 JQUERY 读取 SESSION 变量

如果在后台使用 jquery 进行会话检查失败,如何重定向 index.php 页面?

双击word后,如何使用php或jquery在数据库中插入word

如何保护 php 脚本?