【问题标题】:Laravel ajax internal servor 500 (internal server-error)Laravel ajax 内部服务器 500(内部服务器错误)
【发布时间】:2017-04-12 13:08:18
【问题描述】:

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

<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');

产品控制器:

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(内部服务器错误)

【问题讨论】:

  • 检查你的日志文件,里面有提示。
  • @aynber 在哪里可以找到那个文件?
  • 存储/logs/laravel.log
  • 它在您的存储文件夹中。 app/storage/logs 用于 4.2,/storage/logs 用于 5。
  • @aynber 这是最后两条日志:#38 /home/dlydyv9i/public_html/testing/case-shop/index.php(54): Illuminate\Foundation\Http\Kernel-&gt;handle(Object(Illuminate\Http\Request)) #39 {main}

标签: php jquery ajax laravel


【解决方案1】:

您正在静态访问ajax() 方法(使用::),而您应该使用-&gt; 来代替:

if ($request->ajax()) {

使用 Laravel 日志文件

正如 cmets 中所述,Laravel 可能会在 storage/logs/laravel.log 中告诉您这一点,并带有很长的调用堆栈跟踪(您提到的行,以“#38”和“#39”开头)。只需向上滚动到“#1”之前,您就会找到罪魁祸首。

【讨论】:

    【解决方案2】:

    Laravel 不允许不通过 X-CSRF-TOKEN, 以下是我的工作示例,希望对您有所帮助。

    路线:

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

    现在您需要在 ajax 调用之前添加 ajax 设置 刀片.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
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-16
      • 2016-03-24
      • 1970-01-01
      • 2020-02-12
      • 2019-05-12
      • 2015-09-20
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多