Laravel ajax内部伺服器500(内部服务器错误)

时间:2016-11-28 17:57:37

标签: php jquery ajax laravel

我有一个存储在会话中的购物车,我想刷新会话而不重新加载页面 我试过这个: 视图:

<a href="#" id="product" data-id="{{ $product->id }}" class="item_add single-item hvr-outline-out button2">Add to cart</a>

<script>
$(document).ready(function() {
    $('#product').click(function(event) {
        event.preventDefault();

        let url = "{{ route('add-to-cart') }}";
        let id = $(this).data('id');

        $.ajax({
            url: url,
            type: 'POST',
            data: {product_id: id, _token: "{{ Session::token() }}"}
        })
        .done(function() {
            console.log("success");
        })
        .fail(function() {
            console.log("error");
        })
    });
});

路线:

Route::post('/add-to-cart', 'ProductsController@addToCart')->name('add-to-cart');

的ProductsController:

public function addToCart(Request $request)
{
    if ($request::ajax()) {
        $id = $request->product_id;

        $product = Product::find($id);

        if (Session::has('products')) {
            $products = Session::get('products');
            $products[] = $product;
            Session::put('products', $products);
        }

        else {
            $products = array($product);
            Session::put('products', $products);
        }

        return response()->json();
    }
}

当我点击添加到购物车时,它在控制台中提供了500(内部服务器错误)

2 个答案:

答案 0 :(得分:2)

您应该使用ajax()来静态访问::方法(使用->):

if ($request->ajax()) {

使用Laravel日志文件

正如评论中所提到的,Laravel可能会在storage/logs/laravel.log中告诉你这一点,并且有一个很长的调用堆栈跟踪(你提到的行,从&#34开始;#38&#34;和& #34;#39&#34)。只需滚动到#34;#1&#34;而且你会发现你的罪魁祸首。

答案 1 :(得分:0)

Laravel不允许不通过X-CSRF-TOKEN, 以下是我的工作实例希望它可以帮助你。

路线:

Route::post('block-user','UserController@BlockUser');

现在你需要在你的ajax调用之前添加ajax设置 blade.php:

在标题

中添加此内容
<meta name="csrf-token" content="{{ csrf_token() }}" />

我的剧本如:

<script>
//Ajax setup
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

//Ajax call

    $(".blockuser").bootstrapSwitch();
    $('.blockuser').on('switchChange.bootstrapSwitch', function () {
        var userid = $('#userid').val();
        $.ajax({
            url:'/block-user',
            data:{user_id : userid},
            type:'post',
            success: function(data){
                alert(data);
            }
        });
    });
</script>

控制器:

public function BlockUser(Request $request)
{
    $userid = $request->get('user_id');
//perform operation
}