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

如何用JavaScript存储表单数据并在新页面展示?报错解决

表单提交后Success页面出现「request未定义」错误解决方法

错误信息

Success.html:16 未捕获引用错误:request 未定义,位于Success.html第16行第35位

错误原因

request是后端服务(如Node.js/Express)专属的对象,前端浏览器环境中不存在该对象,直接调用request.body必然报错。同时原代码在提交API后直接跳转,未将表单数据传递到Success页面,导致无法展示用户输入内容。

解决方案

1. 修改表单提交逻辑(script.js)

提交API成功后,将表单数据通过URL搜索参数传递到Success页面:

const formEl = document.querySelector("#form");

formEl.addEventListener("submit", (event) => {
  event.preventDefault();

  const formData = new FormData(formEl);
  const film = formData.get("film");
  const rating = formData.get("rating");

  fetch("https://reqres.in/api/form", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      film,
      rating,
    }),
  })
    .then((response) => {
      // 将数据组装为URL搜索参数
      const params = new URLSearchParams({ film, rating });
      window.location.href = `./Success.html?${params.toString()}`;
    })
    .catch((error) => {
      console.error(error);
    });
});

2. 修改Success页面数据接收逻辑(Success.html)

从URL参数中读取数据并渲染到页面:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Success</title>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <h1>Thank you for your feedback!</h1>
    <p>You watched: <span id="film"></span></p>
    <p>You rated it: <span id="rating"></span></p>
    <script>
      // 解析URL中的搜索参数
      const urlParams = new URLSearchParams(window.location.search);
      const film = urlParams.get("film");
      const rating = urlParams.get("rating");

      const filmEl = document.querySelector("#film");
      const ratingEl = document.querySelector("#rating");

      filmEl.textContent = film;
      ratingEl.textContent = rating;
    </script>
  </body>
</html>

可选方案:用localStorage传递数据

如果不想在URL中暴露数据,可以改用本地存储:

  • 修改script.js的跳转逻辑:
    .then((response) => {
      localStorage.setItem('surveyData', JSON.stringify({ film, rating }));
      window.location.href = './Success.html';
    })
    
  • 修改Success.html的接收逻辑:
    <script>
      const surveyData = JSON.parse(localStorage.getItem('surveyData'));
      if (surveyData) {
        const filmEl = document.querySelector("#film");
        const ratingEl = document.querySelector("#rating");
        filmEl.textContent = surveyData.film;
        ratingEl.textContent = surveyData.rating;
        // 用完删除本地存储,避免残留旧数据
        localStorage.removeItem('surveyData');
      }
    </script>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:40:25