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

如何从SvelteKit页面调用服务器函数?求Hello World示例

SvelteKit 按钮调用服务器函数的 Hello World 示例

下面提供两种直观的实现方式,满足你从页面按钮触发、传参并获取服务器返回结果的需求:

方法1:独立API路由方式

这种方式适合通用的后端接口,可被多个页面调用。

服务器端(创建 src/routes/api/greet/+server.js)

import { json } from '@sveltejs/kit';

export async function POST({ request }) {
  // 解析前端传入的JSON参数
  const { input } = await request.json();
  // 简单的逻辑处理:输入hello返回world
  const responseMsg = input === 'hello' ? 'world' : `未知输入:${input}`;
  return json({ message: responseMsg });
}

前端页面(比如 src/routes/+page.svelte)

<script>
  let inputText = 'hello';
  let serverResponse = '';

  async function triggerServerCall() {
    try {
      const res = await fetch('/api/greet', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ input: inputText })
      });
      const data = await res.json();
      serverResponse = data.message;
    } catch (error) {
      serverResponse = '调用失败,请检查网络或服务器配置';
    }
  }
</script>

<div>
  <input bind:value={inputText} placeholder="输入内容" />
  <button on:click={triggerServerCall}>调用服务器</button>
  {#if serverResponse}
    <p>服务器返回:{serverResponse}</p>
  {/if}
</div>

方法2:页面专属Action方式

这是SvelteKit推荐的页面级数据操作方案,无需额外创建独立API路由。

服务器端(src/routes/+page.server.js)

import { fail } from '@sveltejs/kit';

export async function actions({ request }) {
  // 解析表单格式的参数
  const formData = await request.formData();
  const input = formData.get('input');

  if (!input) {
    return fail(400, { missingInput: true });
  }

  const responseMsg = input === 'hello' ? 'world' : `未知输入:${input}`;
  return { success: true, message: responseMsg };
}

前端页面(src/routes/+page.svelte)

<script>
  let inputText = 'hello';
  let serverResponse = '';

  async function callPageAction() {
    try {
      const formData = new FormData();
      formData.append('input', inputText);

      const res = await fetch('/', {
        method: 'POST',
        body: formData,
        headers: {
          'Accept': 'application/json'
        }
      });

      const data = await res.json();
      if (data.success) {
        serverResponse = data.message;
      } else {
        serverResponse = '请输入参数';
      }
    } catch (error) {
      serverResponse = '调用失败';
    }
  }
</script>

<div>
  <input bind:value={inputText} placeholder="输入内容" />
  <button on:click={callPageAction}>调用服务器函数</button>
  {#if serverResponse}
    <p>服务器返回:{serverResponse}</p>
  {/if}
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:35:15