在Laravel中实现jQuery AJAX GET请求的问题求助
问题分析与解决方案
首先看你当前的代码存在几个关键问题,咱们一步步来修正,实现你想要的「发送GET请求到Laravel控制器,将返回数据追加到视图」的需求:
1. 修复AJAX代码的拼写错误与逻辑缺失
你的jQuery代码里有拼写错误(documnent应该是document),而且没有绑定按钮的点击事件,另外当前控制器是返回跳转响应,不是你需要的可追加的数据。先修正AJAX部分:
<script type="text/javascript"> $(document).ready(function(){ // 给加号按钮绑定点击事件 $('.fa-plus-circle').parent().on('click', function(e){ e.preventDefault(); // 阻止a标签默认的跳转行为 let mealId = $(this).data('meal-id'); // 从标签上获取商品ID $.ajax({ method: 'GET', url: `/addtocartid/${mealId}`, // 拼接带参数的请求地址 data: {'id': mealId}, success: function(response){ // 这里根据控制器返回的类型处理:如果是HTML片段直接追加,是JSON就拼接HTML再追加 $('tbody').append(response); // 要是返回JSON的话,就这么写: // let newRow = `<tr><td>${response.name}</td><td>$${response.price}</td><td><a href="#" data-meal-id="${response.id}"><i class="fa fa-plus-circle"></i></a></td></tr>`; // $('tbody').append(newRow); }, error: function(xhr){ console.error('请求出错啦:', xhr.responseText); } }); }); }); </script>
2. 给视图按钮添加商品ID标识
原来的a标签没有传递商品ID,需要加上data-meal-id属性来存储当前商品的ID:
<tbody> @foreach($restaurant_meals as $meal) <tr> <td> {{$meal->name}} </td> <td> ${{$meal->price}} </td> <td> <a href="#" data-meal-id="{{$meal->id}}"><i class="fa fa-plus-circle"></i></a> </td> </tr> @endforeach </tbody>
3. 调整控制器逻辑,返回可追加的数据而非跳转
现在你的控制器是return redirect()->route('home');,这会让AJAX收到跳转响应,而不是需要的商品数据。我们改成返回HTML片段或者JSON:
方案一:直接返回HTML片段(无需前端拼接)
public function getaddtoCart(Request $request, $id) { $product = Product::find($id); $oldCart = Session::has('cart') ? Session::get('cart') : null; $cart = new Cart($oldCart); $cart->add($product, $product->id); $request->session()->put('cart', $cart); // 返回渲染好的表格行HTML片段 return view('partials.cart-row', ['meal' => $product])->render(); }
然后创建resources/views/partials/cart-row.blade.php文件,内容和现有表格行一致:
<tr> <td> {{$meal->name}} </td> <td> ${{$meal->price}} </td> <td> <a href="#" data-meal-id="{{$meal->id}}"><i class="fa fa-plus-circle"></i></a> </td> </tr>
方案二:返回JSON数据(前端自行拼接HTML)
public function getaddtoCart(Request $request, $id) { $product = Product::find($id); $oldCart = Session::has('cart') ? Session::get('cart') : null; $cart = new Cart($oldCart); $cart->add($product, $product->id); $request->session()->put('cart', $cart); // 返回商品的核心信息 return response()->json([ 'id' => $product->id, 'name' => $product->name, 'price' => $product->price ]); }
4. 确保路由配置正确
在routes/web.php里配置带参数的GET路由:
Route::get('/addtocartid/{id}', [YourController::class, 'getaddtoCart'])->name('cart.add');
这样调整后,点击加号按钮就会发送AJAX请求,控制器处理购物车逻辑后返回数据,前端就能把新的商品行追加到表格里啦~
内容的提问来源于stack exchange,提问作者Patrick Obafemi
相关产品推荐
相关产品推荐

