我正在用Laravel 9开发一个论坛项目,我已经使用了**database
**通知来向用户显示新的通知,如 * 最佳答案 * 等。
通知列表工作正常,但是在页面刷新后显示新通知的数量,但是我需要应用ajax live update来获得实时的应用程序用户体验,所以这里是notification-header
部分,它显示了新通知的数量:
<div class="header__notification-btn" data-dropdown-btn="notification">
<i class="icon-Notification"></i>
@if(count(auth()->user()->unreadNotifications) != 0)
<span id="unreads">{{ digits_persian(count(auth()->user()->unreadNotifications)) }}</span>
@endif
<span style="display:none" id="elan"></span>
</div>
然后我尝试应用Ajax部分,如下所示:
notifcount = 0;
$(document).ready(function() {
setInterval(function() {
$.ajax({
url: 'new-notifications-exists',
method: 'GET',
dataType: 'json',
success: function(response) {
if(notifcount == 0){
notifcount = response.notifcount;
}
if(response.notifcount > notifcount){
notifcount = response.notifcount;
new_notifications_found();
}
}
});
}, 2000);
});
function new_notifications_found(){
$("#unreads").hide();
$("#elan").show();
$("#elan").html("+.");
}
这是new-notifications-exists
URI处理程序:
Route::get('/new-notifications-exists', 'ToolsController@count_notifz');
控制器方法:
public function count_notifz()
{
if(Auth::check()){
$notiflist = DB::table('notifications')->where('notifiable_id',auth()->user()->id)->whereNull('read_at')->get();
$notifcount = $notiflist->count();
$response = array('notifcount' => $notifcount);
echo json_encode($response);
}
}
因此:当我收到新通知时,必须显示<span style="display:none" id="elan"></span>
,因为js函数new_question_found()
最终隐藏#unreads
并显示#elan
div。
但是这个东西不工作,我在控制台得到这个错误:
"不存在模型[App\Models\Question]新通知的查询结果"**
我不知道到底出了什么问题。
因此,如果你有任何想法或知道如何应用ajax正确的这些通知,请让我知道...
我会很感激的
3条答案
按热度按时间nsc4cvqm1#
只需将控制器方法更改为:
它在你的刀片上工作,然后应该在其他地方工作。
jm81lzqq2#
不确定这是否有帮助,但这发生在我身上。问题可能与路由有关。因为错误显示为
NotFoundException
改变这个
到这个
在route.
use App\Http\Controllers\ToolsController;
中导入您的ToolsController
。(id默认路径)然后跑
并使用
return response()->json($response);
代替echo
hzbexzde3#
看起来您在
count_notifz()
函数中使用了错误的模型。您可以使用auth()->user()->unreadNotifications()
方法来检索已验证用户的未读通知,如下所示:确保更新JavaScript代码中的 AJAX URL以指向正确的路径