Laravel中如何在ajax里调用API路由定义的路由名称
解决方案
方法1:Blade模板内直接使用route()辅助函数
如果你的Ajax代码写在Blade模板文件中,可直接调用Laravel内置的route()方法生成带完整前缀的路由地址,路由名和你在routes/api.php中定义的完全一致,不需要手动加前缀:
// 示例:routes/api.php中定义的路由 // Route::get('/google/call', [GoogleApiController::class, 'call'])->name('google.api.call'); $.ajax({ url: "{{ route('google.api.call') }}", method: 'GET', // 其余请求参数 })
方法2:独立JS文件中使用预定义全局路由变量
如果Ajax代码存放在独立的JS文件中无法直接解析Blade语法,可以在Blade模板中提前声明全局路由映射:
- 第一步:在页面的Blade模板头部注入路由变量
<script> window.APP_ROUTES = { googleApiCall: "{{ route('google.api.call') }}", // 其他需要用到的API路由可统一在这里声明 }; </script>
- 第二步:在独立JS文件中直接调用全局变量即可
$.ajax({ url: window.APP_ROUTES.googleApiCall, method: 'GET', // 其余请求参数 })
方法3:修改API路由默认前缀
如果不需要Laravel默认给API路由加的api前缀,可以直接修改路由服务Provider配置:
- 第一步:打开
app/Providers/RouteServiceProvider.php文件,找到API路由组定义部分 - 第二步:修改
prefix参数,去掉默认的'api'值
// 修改前 Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); // 修改后(无默认前缀) Route::prefix('') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php'));
- 第三步:配置修改后执行
php artisan route:clear清除原有路由缓存生效
方法4:手动拼接前缀
最简单的临时方案,直接在请求地址前手动加上/api前缀即可:
$.ajax({ url: "/api/google/call", method: 'GET', // 其余请求参数 })
注意:如果项目后续修改了API前缀,手动拼接的地址需要同步修改,可维护性较差,优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

