Laravel Notification markasread не обновляет таблицу уведомлений - PullRequest
0 голосов
/ 24 сентября 2018

Если я пропустил простую часть всего, прости.Я наблюдаю странное поведение уведомлений Laravel между моей локальной разработкой и моим сервером в Bluehost.На моем ПК установлена ​​версия 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 голосов
/ 27 сентября 2018

@ 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>
0 голосов
/ 24 сентября 2018

Перенаправление страницы выполняется быстрее, чем 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>
...