Ajax не обновляет базу данных - PullRequest
0 голосов
/ 25 августа 2018

Я делаю проект 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;
    }

}

MyПроблема в том, что эта функция не работает, как я хочу.Таблица базы данных не обновляется, а json кажется пустым.Что-то не так с моим кодом?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

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

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(); будет работать.

0 голосов
/ 25 августа 2018

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

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...