如果我错过了整个事情中很容易的一部分,请原谅。 我在本地开发和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>
谢谢
答案 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>