Laravel 5: ошибка Ajax Post 500 (внутренняя ошибка сервера)

Я пытаюсь отправить данные через ajax (добавить в корзину), но в консоли появляется ошибка POST http://localhost/glutax9gs/cartupdate 500 (внутренняя ошибка сервера)

Что не так с моим кодом? Это javascript или контроллер?


вот мой маршрут:

Route::get('/cartupdate', 'FrontEndController@cartupdate')->name('update.cart');
Route::post('/cartupdate', 'FrontEndController@cartupdate')->name('cart.update');

Код контроллера здесь:

    public function cartupdate(Request $request)
    {

        if ($request->isMethod('post')){

            if (empty(Session::get('uniqueid'))){

                $cart = new Cart;
                $cart->fill($request->all());
                Session::put('uniqueid', $request->uniqueid);
                $cart->save();

            }else{

                $cart = Cart::where('uniqueid',$request->uniqueid)
                    ->where('product',$request->product)->first();
                //$carts = Cart::where('uniqueid',$request->uniqueid)
                        //->where('product',$request->product)->count();
                if (count($cart) > 0 ){
                    $data =  $request->all();
                    $cart->update($data);
                }else{
                    $cart = new Cart;
                    $cart->fill($request->all());
                    $cart->save();
                }

            }
            return response()->json(['response' => 'Successfully Added to Cart.','product' => $request->product]);
        }

        $getcart = Cart::where('uniqueid',Session::get('uniqueid'))->get();

        return response()->json(['response' => $getcart]);
    }

Код jQuery находится здесь:

    $(".to-cart").click(function(){

        var formData = $(this).parents('form:first').serializeArray();
        $.ajax({
            type: "POST",
            url: '{{route("cart.update")}}',
            data:formData,
            success: function (data) {
                getCart();
                $.notify(data.response, "success");
            },
            error: function (data) {
                console.info('Error:', data);
            }
        });
    });

Код просмотра здесь:

        <form>
            <p>
                {{csrf_field()}}
                @if (Session::has('uniqueid'))
                    <input type = "hidden" name = "uniqueid" value = "{{Session::get('uniqueid')}}">
                @else
                    <input type = "hidden" name = "uniqueid" value = "{{str_random(7)}}">
                @endif
      <input type = "hidden" name = "title" value = "{{$product->title}}">
      <input type = "hidden" name = "product" value = "{{$product->id}}">
      <input type = "hidden" id = "cost" name = "cost" value = "{{$product->price}}">
      <input type = "hidden" id = "quantity" name = "quantity" value = "1">
           @if ($product->stock != 0 || $product->stock === null )
    <button type = "button" class = "button style-10 to-cart">Add to cart</button>
              @else
           <button type = "button" class = "button style-10 to-cart" disabled>Out Of Stock</button>
           @endif
            {{--<button type = "button" class = "button style-10 hidden-sm to-cart"><i class = "fa fa-shopping-cart"></i>Add to cart</button>--}}
            </p>
        </form>

Ничего полезного в вашем журнале laravel?

brombeer 26.07.2019 20:05

Проверьте свой журнал storage/logs или проверьте журнал ошибок сервера. Ошибка 500 является очень общей ошибкой и не объясняет, что происходит не так.

aynber 26.07.2019 20:07

Я получил эту ошибку в Laravel.log # 50 D:\xampp\htdocs\glutax9gs\project\vendor\laravel\framework\s‌RC\Illuminate\Founda‌tion\Http\Kernel.php‌​(116): Illuminate\Foundation \Http\Kernel->sendRequestThroughRouter(‌​Object(Illuminate\Ht‌​tp\Request)) #51 D:\xampp\htdocs\glutax9gs\index.php(53): Illuminate\Foundation\Http\Kernel->handle( Object(Illuminate\‌​Http\Request)) #52 {main}

Muhammad Waqas 26.07.2019 20:07

Это лишь очень небольшая часть трассировки стека. Вы ищете точную ошибку.

aynber 26.07.2019 20:10

То, как вы создаете объекты Cart, нарушает DI и шаблон MVC. Лучше делегировать эту работу другому классу (не контроллеру) и использовать что-то вроде Cart::firstOrCreate или Cart::create в зависимости от случая.

Felippe Duarte 26.07.2019 20:14

ErrorException: count(): параметр должен быть массивом или объектом, который реализует Countable в D:\xampp\htdocs\glutax9gs\project\app\Http\Controllers\Front‌EndController.php:10‌​1

Muhammad Waqas 26.07.2019 20:16
$cart не является массивом или коллекцией. Поскольку вы используете first(), это либо будет один объект, либо он будет нулевым.
aynber 26.07.2019 20:18

проблема заключалась в том, что переменная $cart вернула значение null, и я использовал ее в функции count() > 0. Я просто удаляю count() > 0, и проблема решена.

Muhammad Waqas 26.07.2019 20:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
2 253
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Судя по вашему комментарию, вы используете count() для элемента, не являющегося массивом, это запрещено. Вы должны изменить свой чек:

От:

if (count($cart) > 0 ){

К:

if (is_array($cart) && count($cart) > 0 ){

Совет: сначала убедитесь, что $cart является массивом, прежде чем проверять его длину.

проблема заключалась в том, что переменная $cart вернула значение null я только что перешел с

if (count($cart) > 0 ){
                    $data =  $request->all();
                    $cart->update($data);
                }

к этому:

if ($cart){
                    $data =  $request->all();
                    $cart->update($data);
                }

и решить проблему Спасибо всем :)

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