使用jQuery AJAX调用Laravel路由出现404错误的求助
排查PUT请求404错误的关键点
1. 路由前缀不匹配
从控制器代码里的return redirect()->route('admin.dataroom.index')能看出,你的数据室路由应该带admin前缀,但AJAX请求的URL是/dataroom/26,正确的URL应该是/admin/dataroom/26。修改JS中的URL:
url: '/admin/dataroom/' + dataroomId,
更稳妥的方式是用Laravel的路由生成函数,在页面里预先输出正确的路由地址:
<input type="hidden" id="dataroomUpdateUrl" value="{{ route('update', ['dataroom' => $dataroom->id]) }}">
然后JS直接读取这个值:
url: $('#dataroomUpdateUrl').val(),
2. 控制器命名空间缺失
如果DataroomController存放在App\Http\Controllers\Admin目录下,路由定义需要补充命名空间:
Route::put('dataroom/{dataroom}', ['as' => 'update', 'uses' => 'Admin\DataroomController@update']);
或者在路由组里统一设置命名空间:
Route::prefix('admin')->namespace('Admin')->group(function() { Route::put('dataroom/{dataroom}', ['as' => 'update', 'uses' => 'DataroomController@update']); });
3. 确认dataroomId的有效性
在AJAX请求前打印dataroomId的值,确保它是真实存在的有效ID:
console.log('dataroomId:', dataroomId);
如果值为空或无效,请求URL会变成/dataroom/,直接导致404。
4. 检查路由文件位置
确保这条PUT路由定义在routes/web.php中,而非api.php。api.php里的路由默认带/api前缀且无CSRF保护,而你的业务逻辑属于后台管理,应该放在web.php里。
5. 排除模型全局作用域影响(可能性低)
虽然你在控制器里用withoutGlobalScope(ActiveScope::class)查询数据,但即便ID为26的数据被作用域过滤,控制器会返回302重定向而非404,所以这不是当前问题的原因。
内容的提问来源于stack exchange,提问作者twan
相关产品推荐
相关产品推荐

