如何使用 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 DataTables Columns 使用数据自动初始化
如果在后台使用 jquery 进行会话检查失败,如何重定向 index.php 页面?