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

Laravel中Ajax请求动态路由出现404错误求助

问题原因及解决方法

你的404错误是因为路由定义的是路径参数,但Ajax请求用的是查询参数,两者不匹配导致Laravel找不到对应路由。

方案一:修改Ajax请求,匹配路径参数路由

你的路由要求参数作为URL路径的一部分(比如/canvas/800x600/my-drawing/1),而非查询参数。修改Ajax代码,把参数拼到URL中:

// 处理可选参数,避免URL出现空分段
let urlSegments = ['/canvas', data.drawing['canvas_size']];
if (data.drawing['name']) {
    urlSegments.push(data.drawing['name']);
    if (data.drawing['id']) {
        urlSegments.push(data.drawing['id']);
    }
}
const targetUrl = urlSegments.join('/');

$.ajax({
    url: targetUrl
    // 无需再传data,参数已包含在URL路径中
});

方案二:修改路由,适配查询参数

如果更倾向用查询参数传递数据,将路由改为不带路径参数的形式:

Route::get('canvas', [DrawingController::class, 'canvas'])->name('canvas');

然后在DrawingController的canvas方法中,通过request()获取查询参数:

public function canvas()
{
    $size = request()->get('size');
    $name = request()->get('name');
    $id = request()->get('id');
    // 业务逻辑处理...
    return view('指定视图名', compact('size', 'name', 'id'));
}

额外提示

  • 用方案一时,要确保参数值不含斜杠等特殊字符,若有需先做URL编码。
  • 更可靠的方式是通过Laravel路由命名生成URL:在前端直接使用后端渲染的路由地址(比如{{ route('canvas', ['size' => $size, 'name' => $name, 'id' => $id]) }}),避免手动拼接出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:55:17