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






Перенаправление страницы выполняется быстрее, чем запрос 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 поместите HTML-код вашего списка уведомлений на свой вопрос, чтобы я мог вам помочь
Можете ли вы поместить обработанный HTML, начиная с <ul class = "dropdown-menu
<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>
Я добавил в комментарии. Спасибо за уделенное время
Большое тебе спасибо. У меня все еще есть проблемы с рутированием, но я сделаю это. Ваши идеи были действительно полезны. После решения задачи с маршрутом отмечу ее как ответ. Я отлично работаю на локальном хосте.
@ 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>
поскольку в предоставленном мною ответе была более подробная информация о причине его работы, почему бы не установить его как принятый ответ?
Я думаю, что установил это
Вы видите какие-либо ошибки на вкладке «Сеть» в инструментах разработчика вашего браузера, когда функция jquery отправляет запрос на получение в / markasread или возвращается 200?