gpt4 book ai didi

javascript - 如何在 ajax 调用时从 laravel Controller 函数返回 View ?

转载 作者:行者123 更新时间:2023-12-01 15:09:58 26 4
gpt4 key购买 nike

我正在做一个书店项目,可以将书籍添加到购物车,用户可以选择许多书籍将它们添加到购物车。当用户点击Add to Cart按钮,我将所选书籍的 ID 添加到名为 cart 的 JS 数组中.当所有选定的书籍都添加到购物车时,我想链接 <a>带有 ajax 调用的标签,它将访问 Controller 函数的 url,并将发送 JS cart数组对象到 Controller 函数,然后在 Controller 函数中,我想将 View 返回给浏览器,我不希望 Controller 函数将响应返回给 ajax 调用,而是我想将 View 返回给浏览器。
这是将所选书籍的ID添加到cart的JS函数JS 数组:

function addToCart(id)
{
if(! cart.includes(id) ) cart.push(id);

cartLength.html(cart.length);
$('#successCart'+id).html('Book added to cart.');

}
这里是 <a>调用ajax函数的标签,函数名为showCart():
<a href="#" onclick="event.preventDefault(); showCart();">
<i class="fa fa-shopping-cart"></i>
<span id="cartLength"></span>
</a>
这里是 showCart()具有ajax代码的函数:
function showCart()
{


$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

$.ajax({
url:"cart",
method:'post',
data:{cart:cart},
dataType: 'html'
})
.done(function(msg){


});
.fail(function(msg){
alert(msg.responseJSON.errors);
});
}
这是 Controller 函数 - 我希望此函数直接将 View 返回给浏览器,而不将其发送回 ajax 调用:
public function showCart(Request $request)
{
return view('cart', ['cart' => $request->cart ]); // this should be returned to the browser and not to the ajax call
}
这是 Controller 功能的路线:
Route::post('/cart', 'HomeController@showCart')->name('home.cart');  
编辑:
我已经用以下技巧暂时解决了这个问题,但这不是一个永久的解决方案:
调用 showCart()后函数来自 ajax用于发送 cart来自 js 的数组变量至 laravel Controller ,我使用以下逻辑将书籍存储在 session 变量中,其 ids存储在 cart大批:
public function showCart(Request $request)
{

session()->put('cart_books', Book::whereIn('id', $request->cart)->get());
session()->save();
return "success";

}
在将查询结果存储在 session 变量中后,我创建了另一个 GET /cart 的路线如下:
Route::get('/cart', 'HomeController@viewCart');  
然后在 post 成功后ajax 调用,我调用了 /cartget方法如下:
.done(function(msg){
console.log('calling cart');
location.href = "cart"; // Here I call the `/cart` with `get` method which will hit the `viewCart()` function of HomeController which will return the view back to the browser along with the results that were stored in the session variable.

})
这是 viewCart() Controller 函数将 View 返回给浏览器并将 session 变量的数据发送到 View :
public function viewCart()
{
$random_books = Book::all()->random(4);
$categories = Category::all();
return view('cart', ['cart_books' => session()->get('cart_books'),
'random_books' => $random_books, 'categories' => $categories]);
}
我希望 Controller 函数将 View 返回给浏览器而不将其返回给 ajax 调用,提前感谢任何帮助。

最佳答案

您可以通过在 Controller 中渲染和返回 View 来从 ajax 调用返回 Raw html,

return view('cart', ['cart' => $request->cart])->render();
这将返回原始 HTML,您可以进一步使用它。但是,从 ajax 返回 HTML 不是一个好方法,您可以从 Controller 返回 JSON,并根据 JSON 数据在前端渲染 View 。

关于javascript - 如何在 ajax 调用时从 laravel Controller 函数返回 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63251604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com