2015-02-10 24 views
1

我有一个通知下拉框(如脸书),它显示存储在我的数据库中的通知。下拉菜单打开时更新MySQL数据库(注)

我想在用户放下通知“菜单”时将通知标记为已读。这可能吗?如果有的话,谁能帮我做到这一点?

数据库将信息存储在字段'notification_read'中,并将其设置为0或1(0表示未读)。

谢谢你,对不起,我为我的下拉菜单中的代码

<ul class="dropdown-menu notifications arrow"> 
        <li class="dd-header"> 
         <span>You have 3 new notification(s)</span> 
         <span><a href="#">Mark all Seen</a></span> 
        </li> 
        <div class="scrollthis"> 
         <li> 
          <a href="#" class="notification-user active"> 
           <span class="time">4 mins</span> 
           <i class="fa fa-user"></i> 
           <span class="msg">New user Registered. </span> 
          </a> 
         </li> 

回答

1

一个NB

例没有进入太多细节(因为这是非常宽泛的,我不知道的结构你代码),你基本上需要两件事:

  1. 更新数据库的服务器端脚本。这可以接受要更新的参数,也可以是全局操作,将所有项目标记为当前用户读取的项目。 (我将假设后者。)
  2. 通过AJAX调用服务器端脚本的客户端代码。

对于服务器端脚本,为简单起见,它将是一个单独的独立“页面”。如果我们假设没有参数,并且它可以从会话中推断当前用户,那么所有脚本需要执行的是执行任何SQL代码执行更新。然后它可以返回(以及“打印到页面”)如truefalse那样简单以指示更新是否成功。 (如果不成功,请务必在某处记录错误,以便诊断问题。)

我们假设这被称为markAsRead.php

现在的客户端脚本,这可能是因为这简单的东西(假设jQuery的,因为它更容易释放手吧):

$.get('markAsRead.php'); 

或者,如果客户端代码需要以某种方式响应,如从菜单更改样式:

$.get('markAsRead.php', function (data) { 
    // examine data for the response, which from the above 
    // description could just be a "true" or "false", and 
    // perform client-side logic based on that response 
}); 

此客户端代码只会在您使用的任何处理程序中调用。例如,如果有一些div称为#messages多数民众赞成被点击的用户,它可能是这样的:

$('#messages').click(function() { 
    $.get('markAsRead.php', function (data) { 
     // examine data for the response, which from the above 
     // description could just be a "true" or "false", and 
     // perform client-side logic based on that response 
    }); 
}); 

总体而言,问题是,客户端代码响应UI事件(点击),发送请求服务器端资源,然后再执行服务器端逻辑,然后从该资源读取响应以执行任何其他客户端逻辑。

+0

谢谢!我已经将一些代码添加到问题中,我需要做些什么? – user4547025 2015-02-10 15:25:01

+0

@ user4547025:好的,这是一个非常宽泛的问题,并且超出了Stack Overflow提供的范围。 *一般来说*,你需要做的是编写JavaScript代码来响应点击事件。 (网上有很多例子和教程介绍了如何做到这一点。)在这段代码中,您将对此答案中描述的服务器端代码执行AJAX请求。 (同样,*许多AJAX例子都可用。)并且服务器端代码将更新数据库。 (相同的反应,大量的例子和教程可用。) – David 2015-02-10 15:27:40

+0

好的,谢谢。我认为添加一个按钮“Mark as read”会更容易... – user4547025 2015-02-10 15:29:05