2017-06-06 18 views
0

私はビューからのAJAX呼び出しを作っていて、バックコントローラとしますが、それは直接ブラウザに何もしていませんLaravel AJAXはデータ

public function compare(Request $request) 
{ 
    $products = Product::whereIn('id', $request->productIds)->get(); 
    return view('compare', compact('products')); 
} 

:コントローラーをトリガさ

function compareProducts() { 
    var productIds = []; 
    $('#compare-widget tbody tr').each(function(i, ele) { 
     productIds[i] = $(ele).data('product-id'); 
    }); 
    $.ajax({ 
     url: 'product/compare', 
     type: 'POST', 
     data: { 
      "_token": "{{ csrf_token() }}", 
      productIds: productIds 
     }, 
     success: function(result) { 
     } 
    }); 
} 

。クロムインスペクタを開くと、OK 200コードが表示され、そこでトリガされたリンクを開くと、正常に表示されますが、AJAXでリダイレクトをトリガすることはできません。

私はwindow.location.href = "compare";私は右のページにリダイレクトされますが、私はもはや、ページの更新後に失われ$products

+1

からの製品は、 'SUCCESS'コールバックではJavaScriptを使用してビューを更新します。 Submit ajax tu controllerはデータを保存するだけです – xmhafiz

+0

どうすればいいですか? – Norgul

+0

それはそのようには機能しません。 ajax呼び出しの後にリダイレクトする場合は、javascriptを使ってこれを明示的に行う必要があります。基本的に 'success'イベントに' window.location.href = url'のようなものをフックします。 – devk

答えて

1

のようなものであることをあなたがproductsへのアクセス権を持っているでしょうそのように、あなたの実装を変更示唆しますページを比較

public function compare(Request $request) 
{ 
    $products = Product::whereIn('id', $request->productIds)->get(); 

    session(['products' => $products]); 

    return url('compare'); 
} 

とあなたの成功のコールバックで、あなたは比較のページへ

をリダイレクトすることができ3210

とあなたのcompareビューのアクセスでセッション

{{ session('products') }} 
+1

素敵で滑らかです、ありがとう – Norgul

0

Ajaxのデータへのアクセスを持っていない操作を行う場合。送信メソッドを使用する必要があります。

は、私はあなたがにリダイレクトするときに、あなたがsessionに製品を保存して比較するページにリダイレクトすることができ、この

<form id="the-form" method="post" action="/products/compare"> 
    {{ csrf_field() }} 
</form> 

<button id="compare-link">Compare</button> 

<script> 
    $('#compare-link').click(
     function(){ 
      $('.hidden-compare').remove(); 
      let productIds = [5,2,3,4]; // implement your algorithm 
      productIds.forEach(function(c) { 
       $('#the-form').append('<input type="hidden"name="compares[]" class="hidden-compare" value="'+c+'">'); 
      }); 
      $('#the-form').submit() 
      } 
    ); 
</script>