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

Laravel心愿单操作后即时显示红心问题求助

解决Laravel心愿单操作后心形图标即时切换问题

1. 修复控制器返回数据

控制器需要返回操作后的心愿单状态(是否已加入),让前端明确知道要切换到哪种状态。修改post_wishlist方法的返回逻辑:

public function post_wishlist(Request $request)
{
    if ($request->ajax()) {
        $data = $request->all();
        $pid = $data['product_id'];
        $userid = $data['user_id'];

        $wishlistExists = DB::table('wishlist')
            ->where('pid', $pid)
            ->where('userid', $userid)
            ->exists();

        if ($wishlistExists) {
            DB::table('wishlist')
                ->where('pid', $pid)
                ->where('userid', $userid)
                ->delete();
        } else {
            DB::table('wishlist')->insertOrIgnore([
                'pid' => $pid,
                'userid' => $userid,
            ]);
        }

        // 返回操作后的心愿单状态
        $newStatus = !$wishlistExists;
        return response()->json(['success' => true, 'inWishlist' => $newStatus]);
    }
}

2. 修正前端AJAX逻辑

前端存在参数拼写错误、未正确绑定当前点击元素、未同步修改图标颜色的问题,修改后的AJAX代码:

<script>
    var user_id = {{ Auth::id() }};
    $(document).ready(function(){
        $('.addtowishlist').click(function()
        {
            // 保存当前点击的元素,避免上下文丢失
            var $this = $(this);
            $.ajaxSetup({
                headers:{
                    'X-CSRF-TOKEN': '{{ csrf_token() }}'
                }
            });
            var product_id = $this.data('productid');
            $.ajax({
                type:'POST',
                url:'/post_wishlist',
                data:{
                    product_id:product_id,
                    user_id:user_id
                },
                success:function(response){
                    // 切换外层a标签的状态类
                    $this.toggleClass('wishlist-added', response.inWishlist);
                    // 修改内部心形图标的颜色
                    var $icon = $this.find('.addtowishliststyle');
                    $icon.css('color', response.inWishlist ? '#8B0000' : 'white');
                }
            })
        });
    });
</script>

3. 修复页面元素ID冲突

当前页面中,心愿单的<a>标签使用了重复的id="addtowishlist"(多商品场景下),会导致JS事件绑定异常,需移除该ID属性:

<a href="#" class="addtowishlist {{ ($productdata->inWishlist ? 'wishlist-added' : '') }}" data-productid="{{ $productdata->id }}">
    <i class="fa fa-heart fa-2x addtowishliststyle" aria-hidden="true" style="color: {{ ($productdata->inWishlist ? '#8B0000' : 'white') }}"></i>
</a>

内容的提问来源于stack exchange,提问作者Meera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:55:10