Ajax не обновляет базу данных

Я делаю проект 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 кажется пустым. Что-то не так с моим кодом?

Вы должны войти в условный счет count ($ noti)> 0, он туда попадает?

Chris Cousins 25.08.2018 06:09

Прости. я не понял этого. что ты хочешь, чтобы я сделал?

Shehan Dhaleesha 25.08.2018 06:12

Внутри этого условия: "if (count ($ noti)> 0) {" выполните \ Log :: info ('here'), чтобы увидеть, записывает ли он в журнале laravel, что он попал в этот блок кода.

Chris Cousins 25.08.2018 06:18

ваш запрос будет запущен только в первый раз. даст вам ноль в следующий раз.

Niklesh Raut 25.08.2018 06:22

Думаю, проблема в коде ajax. Журнал laravel не обновляется до кода Log :: info ('здесь')

Shehan Dhaleesha 25.08.2018 06:35

добавить $ new_noti-> save ();

Jinal Somaiya 25.08.2018 07:17

это будет работать? это запрос на обновление.

Shehan Dhaleesha 25.08.2018 07:51

да замените update () на save ().

Jinal Somaiya 25.08.2018 07:53

О Боже. благодаря. у меня работает; D

Shehan Dhaleesha 25.08.2018 08:10
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
2
9
86
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В вашем коде есть одна орфографическая ошибка.

Я думаю, что вы знаете, как это исправить. При проверке вы должны включить Инструмент разработчика Chrome и выбрать вкладку Сеть для проверки того, что этот запрос был выполнен.

да, я видел это позже. но код все еще не работает. база данных не обновляется

Shehan Dhaleesha 25.08.2018 07:34
Ответ принят как подходящий

Я обновил код действия вашего контроллера, надеюсь, это решит вашу проблему:

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();.

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