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

表单提交后动态路由URL冗余,如何优化为干净的x/search/string格式?

解决方法

问题出在表单里的input带有name="slug"属性——当表单以GET方式提交时,浏览器会自动把所有带name的表单字段拼接成查询参数追加到URL后面,所以哪怕你在action里已经指定了search/${slug},最终还是会多出?slug=xxx的后缀。

直接按下面的步骤修改就能解决:

  1. 移除input的name属性
    去掉input标签里的name="slug",这样浏览器就不会自动添加查询参数了。

  2. 确认路由结构正确
    你的+page.server.ts必须放在src/routes/search/[slug]/目录下,这样SvelteKit才能把URL里的search/xxx中的xxx解析成params.slug。

修改后的表单代码:

<script lang="ts">
    let slug = '';
</script>

<form action={`search/${slug}`} method="GET">
    <input bind:value={slug} type="text" />
    <button type="submit">搜索</button>
</form>

如果想避免用户提交空内容导致无效URL,可以加个简单的提交校验:

<script lang="ts">
    let slug = '';

    const handleSubmit = (e: SubmitEvent) => {
        if (!slug.trim()) {
            e.preventDefault();
            // 这里可以加个弹窗提示用户输入搜索内容
        }
    }
</script>

<form action={`search/${slug}`} method="GET" on:submit={handleSubmit}>
    <input bind:value={slug} type="text" placeholder="请输入搜索关键词" />
    <button type="submit">搜索</button>
</form>

修改后提交表单,URL就会变成你想要的x/search/你的搜索词,同时+page.server.ts里的API查询逻辑完全不受影响,依然能通过params.slug拿到搜索词。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:00:54