错误:由于表单未连接,表单提交被取消

tim*_*man 6 javascript reactjs

关于潜在重复的免责声明:我也遇到过类似的问题,我想我现在已经阅读了几乎所有这些答案,但没有一个为我解决了问题。

我有一个应用程序,前端是 React,后端是 Flask 服务器。我有一个重大问题。代码似乎检查了前端和后端,但是当我单击表单的提交按钮后,我在 JS 控制台中收到错误:Form submission canceled because the form is not connected.

现在,我的表单上只有一个按钮,并且该按钮的类型为submithandleSubmit处理程序位于form标记中,因此我认为这不会导致问题。我还添加了此配置对象来处理潜在的 CORS 错误,但至少我没有收到任何 CORS 错误。

React 表单组件代码:

import React, { useState } from "react";
import axios from "axios";
import Button from "@material-ui/core/Button";
import { TextField } from "@material-ui/core";
import DisplayUpper from "./DisplayUpper";

function Form() {
  const [inputText, setInputText] = useState("");
  const [fetchedData, setFetchedData] = useState("");
  const [isSubmitted, setSubmitted] = useState(false);

  const handleSubmit = (e) => {
    setSubmitted(true);

    console.log("button clicked");

    const config = {
      headers: { "Access-Control-Allow-Origin": "*" },
    };

    axios
      .post(
        "http://localhost:5000/process",
        {
          inputText: inputText,
        },
        config
      )
      .then((res) => {
        console.log("res", res);
        setFetchedData(res.data);
      })
      .catch((er) => {
        console.log(er);
      });
  };

  return (
    <div>
      <form onSubmit={handleSubmit} method="post">
        <label>
          Enter Text :
          <TextField
            multiline={true}
            variant="outlined"
            name="inputText"
            value={inputText}
            onChange={(e) => setInputText(e.target.value)}
          />
        </label>
        <Button variant="contained" color="primary" type="submit" name="Submit">
          SUBMIT
        </Button>
      </form>
      {isSubmitted && <DisplayUpper />}
    </div>
  );
}

export default Form;
Run Code Online (Sandbox Code Playgroud)

然后,app.py代码:

@app.route('/process', methods=['POST'])
def result():
    text = request.form.get('inputText')
    upper_text = text.upper()
    print(upper_text)
    return upper_text
Run Code Online (Sandbox Code Playgroud)

我在 package.json 中设置代理:“http://localhost:5000”。

ksa*_*sav 4

type="submit"当单击表单内部的按钮时,浏览器会尝试通过表单上的方法将表单提交到当前 URL 。

注意:如果您没有type在 上设置属性<button>则将使用 的默认值submit

当您使用 javascript 处理表单提交时,您应该防止表单的默认行为:

const handleSubmit = (e) => {
  e.preventDefault();
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • @timman:你的错误出现在 python 后端。您提出了一个标记为 javascript 的问题。如果您需要帮助调试 Flask 应用程序,请发布新问题。 (2认同)
  • 您可以尝试将 request.form 更改为 request.json 或使 axios 发布表单数据而不是 json。 (2认同)