📖 Scenario: You are building a simple Svelte app with a form where users can submit their email to subscribe to a newsletter. After submitting, you want to redirect them to a thank you page.
🎯 Goal: Create a Svelte form that uses an action to handle the submission and then redirects the user to a thank you page using a redirect from the action.
📋 What You'll Learn
Create a form with an action function in a +page.server.js file
The action should receive the form data and perform a redirect
Use SvelteKit's redirect helper to redirect to /thank-you
Create a simple thank you page at /thank-you/+page.svelte
💡 Why This Matters
🌍 Real World
Redirecting users after form submissions is common in web apps, such as signups, logins, or feedback forms.
💼 Career
Understanding how to handle form submissions and redirects on the server side is essential for building interactive and user-friendly web applications.
Progress0 / 4 steps
1
Set up the form in +page.svelte
Create a Svelte component in +page.svelte with a form that has an action attribute set to an empty string. The form should have an input field with name="email" and a submit button with the text Subscribe.
Svelte
Hint
Remember to set the action attribute on the form to an empty string to link it to the server action.
2
Create the action function in +page.server.js
Create a file +page.server.js and export an actions object with a default async function named default that accepts an { request } parameter. Inside the function, get the form data by calling await request.formData() and extract the email field from it.
Svelte
Hint
Use await request.formData() to get the form data, then use formData.get('email') to get the email value.
3
Add redirect to the action function
Import redirect from @sveltejs/kit at the top of +page.server.js. Then, inside the default action function, after getting the email, return redirect(303, '/thank-you') to redirect the user to the thank you page.
Svelte
Hint
Use throw redirect(303, '/thank-you') to perform the redirect from the action.
4
Create the thank you page
Create a new file +page.svelte inside a folder named thank-you. Inside it, write a simple message inside a <main> tag that says Thank you for subscribing!.
Svelte
Hint
Use a <main> tag with a heading inside it for the thank you message.
Practice
(1/5)
1. What is the purpose of using throw redirect(status, url) inside a SvelteKit action?
easy
A. To display an error message on the same page
B. To send the user to a different page after the action completes
C. To stop the server from running
D. To reload the current page without changes
Solution
Step 1: Understand the role of redirect in actions
The throw redirect(status, url) command is used to send the user to a new page after an action finishes, such as after submitting a form.
Step 2: Identify the effect of the redirect
This redirect changes the browser location to the given URL, guiding the user to a different page.
Final Answer:
To send the user to a different page after the action completes -> Option B
Quick Check:
Redirect in action = send user to new page [OK]
Hint: Redirect sends user to a new page after action finishes [OK]
Common Mistakes:
Thinking redirect stops the server
Confusing redirect with showing errors
Assuming redirect reloads the same page
2. Which of the following is the correct syntax to redirect to '/dashboard' with status 303 inside a SvelteKit action?
easy
A. redirect(303, '/dashboard');
B. return redirect(303, '/dashboard');
C. throw redirect(303, '/dashboard');
D. throw new Redirect(303, '/dashboard');
Solution
Step 1: Recall correct redirect usage in SvelteKit actions
In SvelteKit, to redirect from an action, you must throw the redirect, not just call or return it.
Step 2: Match the exact syntax
The correct syntax is throw redirect(status, url). So throw redirect(303, '/dashboard'); is correct.
Step 1: Check how redirect should be used in actions
In SvelteKit, redirects inside actions must be thrown, not returned.
Step 2: Identify the mistake in the code
The code uses return redirect(303, '/home'); which is incorrect; it should be throw redirect(303, '/home');.
Final Answer:
Using return instead of throw for redirect -> Option A
Quick Check:
Redirect must be thrown, not returned [OK]
Hint: Redirect inside actions must be thrown, not returned [OK]
Common Mistakes:
Returning redirect instead of throwing
Forgetting to import redirect
Using wrong status codes
5. You want to redirect users to '/profile' after a successful POST form submission using a SvelteKit action. Which status code should you use with throw redirect(status, '/profile') to follow best practices?
hard
A. 303
B. 302
C. 307
D. 301
Solution
Step 1: Understand HTTP redirect status codes for POST
After a POST request, the recommended redirect status is 303, which tells the browser to perform a GET request to the new URL.
Step 2: Match the correct status code for SvelteKit redirect
Using throw redirect(303, '/profile') ensures proper redirect behavior after form submission.
Final Answer:
303 -> Option A
Quick Check:
POST redirect status = 303 [OK]
Hint: Use 303 status for redirect after POST form submission [OK]
Common Mistakes:
Using 301 or 302 which may cause method issues
Using 307 which preserves method but is less common
Not specifying status code at all
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.