You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:36:05