php
  • ajax
  • laravel
  • token
  • 2016-12-12 7 views 0 likes 
    0

    Я пытаюсь добавить новую тележку при нажатии на кнопку с ajax.My кодом ниже:Laravel добавить новую запись в базе данных возвращает ошибку

    1) Кнопка

    <a class="checkout-button">checkout</a> 
    

    2) Ajax

    $('.checkout-button').on('click', function(){ 
        var url = '{{route('postcheckout')}}'; 
        $.ajax({ 
        type : 'POST', 
        url : url, 
        headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' }, 
        data : {'user_id' : 5}, 
        success:function(data){ 
         console.log(data); 
        } 
        }); 
    }); 
    

    console.log и данные, используемые для испытания.

    3) Маршрут

    Route::post('/checout',[ 
        'uses' => '[email protected]', 
        'as' => 'postcheckout' 
    ]); 
    

    4) Контроллер

    Use App\delivery_cart; 
    
    public function insertCart(Request $request){    
        $user_id = $request['user_id']; 
        $cart = new delivery_cart; 
        $cart->user_id = $user_id; 
        $cart->save(); 
    } 
    

    База данных имеет 2 колонки - cart_id (первичные, аг) и user_id.

    Когда я пытаюсь вставить новую запись, я получаю сообщение об ошибке 500 (внутренняя ошибка сервера, которая говорит: MethodNotAllowedHttpException. Однако когда я читаю из базы данных, она работает. Я нашел похожие вопросы, и я думаю, что что-то не так с токеном, но Я не могу решить эту проблему.

    Любой, кто может мне помочь?

    +0

    привет .. Вы уверены, что вы только посетить маршрут через ' $ _POST' метод? Я имею в виду, может быть, вы не перенаправляете этот маршрут в методе '$ _GET', просто спрашивая – Beginner

    +0

    , этот маршрут имеет как почтовый, так и пост, но я пробовал с другим маршрутом только с методом post, и он не работал. – george

    +0

    Я вижу ,, потому что вы не включали '$ _GET' в свои маршруты, чтобы изменить его на' Route :: any (array ('post', 'get'), '/ checout', [ 'uses' => 'checkoutController @ insertCart', 'as' => 'postcheckout' ]); 'или просто добавить' Route :: get ('/ checout', [ 'uses' => 'checkoutController @ insertCart', 'as '=>' postcheckout ' ]); ' – Beginner

    ответ

    0

    Он генерирует эту ошибку, потому что маршрут не метод get в ваших маршрутов

    решить, что вы должны зарегистрироваться этот метод на ваши маршруты.

    изменить ваши маршруты

    из

    Route::post('/checout',[ 
        'uses' => '[email protected]', 
        'as' => 'postcheckout' 
        ]); 
    

    в

    Route::any(array('post','get'),'/checout',[ 
        'uses' => '[email protected]', 
        'as' => 'postcheckout' 
        ]); 
    

    или вы можете просто добавить

    Route::get('/checout',[ 
        'uses' => '[email protected]', 
        'as' => 'postcheckout' 
        ]); 
    
    +0

    Почему я должен использовать метод get? – george

    +0

    @andrian, потому что вы используете этот маршрут в методе 'get', также это правило laravel, вы должны зарегистрировать каждый метод, который вы используете в своих маршрутах. – Beginner

    +0

    да, но я использую маршрут проверки только для публикации. Это то, что я не понимаю. Я только сообщение с ajax в этом маршруте. Зачем мне тоже нужен маршрут? – george

    Смежные вопросы