2017-06-06 211 views
0

我正在從視圖中的AJAX呼叫控制器和背部:Laravel AJAX與數據

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) { 
     } 
    }); 
} 

這是觸發控制器:

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

,但它不是在瀏覽器中直接做任何事。當我打開Chrome檢查器時,我看到一個OK 200代碼,當我打開觸發鏈接時,它顯示正常,但我無法通過AJAX觸發重定向。

如果我做一個window.location.href = "compare";我重定向到正確的頁面,但我不再有機會獲得$products

+1

產品在'success'回調使用JavaScript刷新視圖。提交ajax tu控制器只是爲了存儲數據 – xmhafiz

+0

我該怎麼做? – Norgul

+0

它不這樣工作。如果你想在ajax調用後重定向,你將需要明確地用javascript做到這一點。基本上在'success'事件上掛上了'window.location.href = url'這樣的東西。 – devk

回答

1

您可以將產品保存到session並重定向到比較頁面,這樣你將有機會獲得products,當你重定向到比較頁

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

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

    return url('compare'); 
} 

,並在你的成功回調,你可以重定向到比較頁面

success: function (result) { 
    window.location.href = result; 
} 

,並在您compare視圖訪問從會話

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

好而光滑,謝謝 – Norgul

0

阿賈克斯數據頁面刷新後丟失。你應該使用提交方法。

我建議你改變你的實現是這樣的

<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>