Laravel Notification markasread不会更新通知表

时间:2018-09-24 15:24:47

标签: laravel notifications

如果我错过了整个事情中很容易的一部分,请原谅。 我在本地开发和Bluehost上的服务器之间观察到Laravel Notifications的奇怪行为。在我的PC上,它运行版本5.5和Bluehost 5.4

我设置了数据库通知,并成功获得了预期的结果。

<ul class="dropdown-menu list-unstyled msg_list" role="menu"  onclick="markPostAsRead({{count(auth()->user()->unreadNotifications)}})">
   <li>
   @forelse (auth()->user()->unreadNotifications as $notification)
          @include('layouts.notifications.'.snake_case(class_basename($notification->type)))
        @empty
        <strong>No notification</strong>
        @endforelse
        </li>
    </ul>

然后,当用户单击它时,将触发一个javascript以获取更新数据库通知表中read_at列的路由。

<script type="text/javascript" > 
 function markPostAsRead(countofNotification){
    if(countofNotification !== '0')
      $.get('/markasread');
 }
</script>

以下是路线

 Route::get('/markasread',function(){
        auth()->user()->unreadNotifications->first()->markAsRead();
   });

在我的本地环境中一切都按预期进行。

上载所有迁移文件后,通知将按预期显示。但是,当用户单击通知时,表不会更新。 我检查了js是否在服务器和本地环境上都使用了一些警报。但是我不明白为什么该表不会在服务器端更新。

如果您能给我一个提示,它将对我有帮助。

通知html是关注对象

<div class="top_nav">
  <div class="nav_menu">
    <nav>
      <div class="nav toggle">
        <a id="menu_toggle"><i class="fa fa-bars"></i></a>
      </div>

      <ul class="nav navbar-nav navbar-right">
        <li role="presentation" class="dropdown"  >
          <a href="javascript:;" class="dropdown-toggle info-number" data-toggle="dropdown" aria-expanded="false">
            <i class="fa fa-globe"></i>
            <span class="badge bg-green">{{count(auth()->user()->unreadNotifications)}}</span>
          </a>
          <ul class="dropdown-menu list-unstyled msg_list"  id="notification" role="menu"  onclick="markPostAsRead({{count(auth()->user()->unreadNotifications)}})">
            <li>
              @forelse (auth()->user()->unreadNotifications as $notification)
              @include('layouts.notifications.'.snake_case(class_basename($notification->type)))
              @empty
              <strong>No Unread Notification</strong>
              @endforelse
            </li>
          </ul>
        </li>.
      </ul>
    </nav>
  </div>
</div>

<script type="text/javascript" > 
  var mynotificationcount;
  function markPostAsRead(countofNotification){
   mynotificationcount= countofNotification;
 }

 $('#notification').on('click', function(e){
  e.preventDefault();
  var href = this.href;
  if(mynotificationcount !== '0') {
    $.get('/markasread');
  } else {
    window.location.href = href;
  }
});
</script>

谢谢

2 个答案:

答案 0 :(得分:1)

页面重定向比Ajax请求更新表要快。

您应该使click事件触发ajax。

<script type="text/javascript" > 
    $('#notification a').on('click', function(e){
        if(countofNotification !== '0') {
            $.get('/markasread');
        }
    });
</script>

如果这不起作用,您将需要更复杂的内容,例如

<script type="text/javascript" > 
    $('#notification a').on('click', function(e){
        e.preventDefault();
        var href = this.href;
        if(countofNotification !== '0') {
            $.get('/markasread')->always(function(){window.location.href = href;});
        } else {
            window.location.href = href;
        }
    });
</script>

答案 1 :(得分:-1)

@ N69S 非常感谢。

我稍微修改了Java脚本以解决问题。我命名路线并设置如下

<script type="text/javascript" > 
  var mynotificationcount;
  function markPostAsRead(countofNotification){
   mynotificationcount= countofNotification;
 }
</script>
<script type="text/javascript" > 
    $('#notification a').on('click', function(e){
        e.preventDefault();
        var href = this.href;
        var url = "{{route('markasread')}}";
        if(mynotificationcount !== '0') {
           $.get(url).always(function(){window.location.href = href;});
          // window.location.href="{{ route('markasread') }}";
        } else {
            window.location.href = href;
        }
    });
</script>