2016-11-28 19 views
0

は、私がセッションに格納されたショッピングカートを持っていると私はページ をリロードせずにセッションをリフレッシュしたい私はこれを試してみました: ビュー:Laravelアヤックス内部servor 500(内部サーバーエラー)

<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', '[email protected]')->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

ログファイルを確認すると、そこにヒントがあります。 – aynber

+0

@aynberそのファイルはどこにありますか? –

+0

storage/logs/laravel.log – Wistar

答えて

2

あなたがあなたの代わりに->を使用しなければならないとき、(::を使用して)静的にajax()メソッドにアクセスしている:

if ($request->ajax()) { 

Laravelログファイルコメントで述べたように

を使用して 、Laravelはおそらくであなたにこれを言っていますには、長いコールスタックトレース( "#38"と "#39"で始まる行)が含まれています。 "#1"の前にスクロールすれば、あなたの犯人を見つけることができます。

2

LaravelはX-CSRF-TOKENを渡さずに許可していません。 以下は私の実際の実施例です。

ルート:

Route::post('block-user','[email protected]'); 

今、あなたはそう blade.phpであなたのAJAX呼び出しの前にAJAXの設定を追加する必要があります。

よう

<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 
} 
関連する問題