Laravel对接jQuery Datatables AJAX请求报NotFoundHttpException 404错误如何解决
问题产生原因
导致跨页面404的核心问题出在AJAX请求URL的生成逻辑:
- 错误使用
URL::asset()方法生成业务路由地址:URL::asset()是Laravel用来拼接静态资源(CSS、JS、图片等)路径的方法,生成的是相对于当前页面地址的相对路径,在不同层级的页面路由下解析出的最终请求地址会发生变化,这就是为什么单个页面能正常访问,其他页面报404的直接原因。 - 如果这段Datatables配置代码写在独立的
.js文件中,Blade模板的{{ }}语法不会被Laravel解析执行,最终请求的URL会直接变成{{URL::asset('AgencyExpenses')}}字符串,必然触发404错误。
排查解决步骤
- 首先给路由设置唯一名称,方便全局统一生成地址,修改
web.php中的路由定义:
Route::get('AgencyExpenses',[AgencyExpController::class, 'expense'])->name('agency.expenses.index');
- 修正请求URL的生成逻辑:
若Datatables配置写在Blade模板的<script>标签内,直接替换url配置项,route()方法会生成完整的绝对路由地址,不会受当前页面路径影响,天然适配多页面场景:
若Datatables配置写在独立JS文件中,先在公共Blade模板头部声明全局路由变量,确保所有页面都能读取到:url: "{{ route('agency.expenses.index') }}",
再修改JS中的url配置项:<script> window.AGENCY_EXPENSES_ROUTE = "{{ route('agency.expenses.index') }}"; </script>url: window.AGENCY_EXPENSES_ROUTE, - 验证路由可用性:
执行命令查看路由列表,确认路由存在且名称匹配:
直接在浏览器地址栏输入生成的php artisan route:listAgencyExpenses路由完整地址,确认可以正常返回JSON数据,排除路由本身定义错误、权限中间件拦截的问题。 - 额外校验项:如果你的路由放在了带前缀的路由组下,需要确认生成的URL前缀与路由定义一致。
内容的提问来源于stack exchange,提问作者Enigma
相关产品推荐
相关产品推荐

