Laravel AJAX与数据
问题描述:
我正在从视图中的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
答
您可以将产品保存到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
答
阿贾克斯数据页面刷新后丢失。你应该使用提交方法。
我建议你改变你的实现是这样的
<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>
产品在'success'回调使用JavaScript刷新视图。提交ajax tu控制器只是为了存储数据 – xmhafiz
我该怎么做? – Norgul
它不这样工作。如果你想在ajax调用后重定向,你将需要明确地用javascript做到这一点。基本上在'success'事件上挂上了'window.location.href = url'这样的东西。 – devk