Laravel Notification markasread не обновляет таблицу уведомлений

Если я пропустил легкую часть всего, прости. Я наблюдаю странное поведение уведомлений 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>

Спасибо,

Вы видите какие-либо ошибки на вкладке «Сеть» в инструментах разработчика вашего браузера, когда функция jquery отправляет запрос на получение в / markasread или возвращается 200?

Giovanni S 24.09.2018 18:06

@ Джованни, спасибо. Да статус 200

Adjeiinfo 25.09.2018 01:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
526
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Перенаправление страницы выполняется быстрее, чем запрос Ajax на обновление таблицы.

вы должны сделать событие щелчка запускающим 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>

Спасибо за ваше руководство. не могли бы вы помочь мне изменить раскрывающийся список. Я получил id = 'notification', но он не прошел.

Adjeiinfo 25.09.2018 01:56

@Adjeiinfo поместите HTML-код вашего списка уведомлений на свой вопрос, чтобы я мог вам помочь

N69S 25.09.2018 10:34

Можете ли вы поместить обработанный HTML, начиная с <ul class = "dropdown-menu

N69S 25.09.2018 11:11

<ul class = "dropdown-menu list-unstyled msg_list" id = "notification" role = "menu" onclick = "markPostAsRead (1)"> <li> <a href = "localhost.test / сообщение / 9"> <strong> Владелец </ strong > Закрыл тикет <strong> 325 </strong> </a> </li> </ul>

Adjeiinfo 25.09.2018 11:22

Я добавил в комментарии. Спасибо за уделенное время

Adjeiinfo 25.09.2018 11:23

Большое тебе спасибо. У меня все еще есть проблемы с рутированием, но я сделаю это. Ваши идеи были действительно полезны. После решения задачи с маршрутом отмечу ее как ответ. Я отлично работаю на локальном хосте.

Adjeiinfo 25.09.2018 12:23
Ответ принят как подходящий

@ 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>

поскольку в предоставленном мною ответе была более подробная информация о причине его работы, почему бы не установить его как принятый ответ?

N69S 28.09.2018 18:16

Я думаю, что установил это

Adjeiinfo 29.09.2018 03:49

Другие вопросы по теме