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

Laravel项目中JQuery AJAX POST请求报401 Unauthorized错误如何解决

问题解决方案

401 Unauthorized错误修复

401报错为未授权访问,对应修复步骤如下:

  • 路由路径匹配校验:你AJAX请求的地址是/admin/getproductprice,但现有路由定义的是不带admin前缀的/getproductprice,路径不匹配会触发路由规则异常。可二选一调整:要么修改AJAX的url参数为/getproductprice,要么将路由定义修改为Route::post('/admin/getproductprice', [Merchadise_controller::class,'getproductprice'])->name('getproductprice');
  • 权限中间件校验:如果你的路由是包裹在带有auth中间件的admin路由组下,当前账号未登录admin后台时就会返回401错误,要么登录admin账号后测试,要么将该接口路由移出auth中间件组(如果该接口不需要登录权限即可访问)。
  • CSRF配置校验:确认页面头部存在<meta name="csrf-token" content="{{ csrf_token() }}">标签,否则AJAX设置的X-CSRF-TOKEN无法正常取值,也会触发权限类报错。

其他代码逻辑问题修复

解决401问题后,现有代码还存在逻辑错误无法正常获取价格,对应修复如下:

  • 参数名不匹配修复:AJAX传给后端的尺寸参数名为productsize,但控制器查询时用的是$data['productattr_size'],参数名对应不上会导致查询不到数据,需要将控制器查询条件修改为'productattr_size'=>$data['productsize']
  • 调试代码清理:控制器中echo "<pre>";print_r($data);die;这段调试代码会直接终止程序执行,后续价格查询逻辑完全不会运行,需要删除该段代码。
  • 空数据异常处理:查询对应尺寸的商品属性时如果不存在对应数据,直接调用->productattr_price会抛出错误,需要补充非空判断。
  • 输出格式调整:控制器接口不要用echo输出内容,直接return返回值即可,AJAX的success回调才能正常获取返回结果。

修复后完整代码示例

修正后的JQuery脚本

$.ajaxSetup({
    headers:{
        'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content')
    }
});
$(document).ready(function(){
    $('#getprice').change(function(){
        var productsize=$(this).val();
        if(productsize==""){
            alert("please Select size");
            return false;
        }
        var product_id=$(this).attr("product-id");
        $.ajax({
            url:'/getproductprice',
            data:{productsize:productsize,product_id:product_id},
            type:'POST',
            success:function(resp){
                $(".getattrprice").html("Sh."+resp);
            },error:function(xhr){
                console.log(xhr.responseText);
                alert("Error");
            }
        });
    });
});

修正后的控制器方法

public function getproductprice(Request $request)
{
    if($request->ajax()){
        $data=$request->all();
        $getproductprice=Productattribute::where([
            'product_id'=>$data['product_id'],
            'productattr_size'=>$data['productsize']
        ])->first();
        if($getproductprice){
            return $getproductprice->productattr_price;
        }
        return '0';
    }
    return redirect('admin/merchadise')->with('success','The Merchaise has been created succesfully');
}

修正后的路由配置

// 不需要权限验证时直接放在web.php全局位置,不要嵌套在auth中间件组内
Route::post('/getproductprice', [Merchadise_controller::class,'getproductprice'])->name('getproductprice');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:03