You need to enable JavaScript to run this app. Laravel实现AJAX实时关注按钮时点击关注无响应问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Laravel实现AJAX实时关注按钮时点击关注无响应问题求助

问题原因

1. 响应字段不匹配

控制器返回的JSON结构为{"success": $toggleResult},但前端JS代码中读取的是不存在的data.data字段,导致判断逻辑永远命中data.data为空的分支,只有取消关注时的操作刚好符合预期,关注操作逻辑完全走反。

2. 操作判断逻辑错误

toggleFollow方法返回的结果中,attached数组非空代表执行了关注操作,detached数组非空代表执行了取消关注操作,原有逻辑没有基于这个特征做判断,存在逻辑隐患。

3. 潜在拼写错误

控制器方法名follwUserRequest存在拼写错误(正确为followUserRequest),如果路由绑定的方法名和这个不一致也会导致请求失败。


修复方案

1. 修复控制器代码

修正拼写,同时保持返回结构清晰:

public function followUserRequest(Request $request){
    $user = User::find($request->user_id);
    $response = auth()->user()->toggleFollow($user);
    return response()->json([
        'success' => true,
        'data' => $response
    ]);
}

2. 修复前端JS逻辑

调整判断条件,基于toggleFollow的返回结果判断操作类型,同时增加点击锁防止重复提交:

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

    $('.action-follow').click(function(){
        // 加锁防止重复点击
        if($(this).hasClass('loading')) return;
        $(this).addClass('loading');

        var user_id = $(this).data('id');
        var cObj = $(this);
        var followerCount = parseInt($(this).parent("div").find(".tl-follower").text());

        $.ajax({
           type:'POST',
           url:'/profile/follow',
           data:{user_id:user_id},
           success:function(data){
              // attached非空=关注成功,detached非空=取消关注成功
              if(data.data.attached.length > 0){
                // 关注成功,按钮改UnFollow,粉丝数+1
                cObj.find("strong").text("UnFollow");
                cObj.parent("div").find(".tl-follower").text(followerCount + 1);
              } else {
                // 取消关注成功,按钮改Follow,粉丝数-1
                cObj.find("strong").text("Follow");
                cObj.parent("div").find(".tl-follower").text(followerCount - 1);
              }
           },
           complete: function() {
              // 请求完成解锁
              cObj.removeClass('loading');
           }
        });
    });
});

3. 额外检查

确保页面头部存在CSRF的meta标签,否则AJAX请求会报419错误:

<meta name="csrf-token" content="{{ csrf_token() }}">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:48:04