Я делаю проект laravel и хочу загрузить уведомление через вызов ajax. Я написал код для этого. Это мой вызов ajax.
$(document).ready(function () {
$('#notificationBar').on('click', function () {
getNotifications();
});
function getNotifications(){
var getNotificationURL = '{{ route('getNotifications') }}';
var token = '{{ Session::token() }}';
$.ajax({
method: 'post',
url : getNotificationURL,
data : {
_token : token
},
success:function (data) {
if (data === null){
}else{
$('#notificationBar').find('#notificationDropDown').find('#tempId').append('<a style = "background:#e0e0d1; margin:2px 2px;" href = "'+data.username+'"><img src = "'+data.url+'" class = "w3-circle" style = "height:40px;width:40px;margin:4px 4px;" alt = "Avatar"> <b> '+data.name+'</b> '+data.msg+'</a>');
}
}
});
}
});
и это мой маршрут
Route::post('getnotifications', [
'uses' => 'NotificationController@getNotifications',
'as' => 'getNotifications'
]);
маршрут будет направлен к этому методу в контроллере уведомлений
public function getNotifications(Request $request){
$noti = DB::table('notifications')->where('accepter', Auth::user()->id)->where('status', 1)->where('ajax_call',true)->where('important',true)->first();
if (count($noti)>0){
$new_noti = Notifications::find($noti->id);
$new_noti->ajax_call = false;
$new_noti->update();
$notification = DB::table('notifications')->leftjoin('users','users.id','notifications.current_user')->where('id', $noti->id)->first();
$pro_ulr = asset('/img/'.$notification->pic);
$arr = array(
"username" => $notification->username,
"url" => $pro_ulr,
"name" => $notification->name,
"msg" => $notification->msg
);
return response()->json($arr);
}else{
return null;
}
}
Моя проблема в том, что эта функция работает не так, как мне хотелось бы. Таблица базы данных не обновляется, и json кажется пустым. Что-то не так с моим кодом?
Прости. я не понял этого. что ты хочешь, чтобы я сделал?
Внутри этого условия: "if (count ($ noti)> 0) {" выполните \ Log :: info ('here'), чтобы увидеть, записывает ли он в журнале laravel, что он попал в этот блок кода.
ваш запрос будет запущен только в первый раз. даст вам ноль в следующий раз.
Думаю, проблема в коде ajax. Журнал laravel не обновляется до кода Log :: info ('здесь')
добавить $ new_noti-> save ();
это будет работать? это запрос на обновление.
да замените update () на save ().
О Боже. благодаря. у меня работает; D

В вашем коде есть одна орфографическая ошибка.
Я думаю, что вы знаете, как это исправить. При проверке вы должны включить Инструмент разработчика Chrome и выбрать вкладку Сеть для проверки того, что этот запрос был выполнен.
да, я видел это позже. но код все еще не работает. база данных не обновляется
Я обновил код действия вашего контроллера, надеюсь, это решит вашу проблему:
public function getNotifications(Request $request)
{
$notifications = Notifications::where('accepter', Auth::user()->id)->where('status', 1)->where('ajax_call', true)->where('important', true)->get();
if ( $notifications->count() === 0 ) {
return null;
}
$newNotification = $notifications->first();
$newNotification->ajax_call = false;
$newNotification->save();
$notification = DB::table('notifications')->leftjoin('users', 'users.id', 'notifications.current_user')->where('id', $noti->id)->first();
$pro_ulr = asset('/img/'.$notification->pic);
$arr = [
"username" => $notification->username,
"url" => $pro_ulr,
"name" => $notification->name,
"msg" => $notification->msg,
];
return response()->json($arr);
}
У вас возникла проблема с Table::first(), вам нужно вызвать в get() вместо first(). Также вместо $new_noti->update(); будет работать просто $new_noti->save();.
Вы должны войти в условный счет count ($ noti)> 0, он туда попадает?