Laravel AJAX控制器和数据返回

时间:2017-06-06 16:38:00

标签: javascript php jquery 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

2 个答案:

答案 0 :(得分: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 :(得分:0)

页面刷新后Ajax数据丢失。您应该使用提交方法。

我建议你改变你的实现是这样的

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