post 请求后如何防止重新加载?

How prevent reload after post request?

我正在尝试向服务器发出 post 请求并对响应进行处理。事情似乎在服务器端有效。问题是页面在响应完成后重新加载,我无法对响应执行任何操作。

常见的建议是使用 buttonpreventDefault。这些建议没有解决问题:正如您在下面看到的,输入类型是 button(不是 submit)并且 preventDefault() 在事件上不起作用。

有人知道我缺少什么吗?

 <form id="modelCodeForm">
    <label for="codehere"></label>
    <div id="modelAreaDiv">
      <textarea id="modelArea" cols="60" rows="20">
stuff
      </textarea>
      <br>
      <input id="submitUserModel" type="button" value="run on server">
  </div>
  </form>
function initializeUserModel(){
  let model = document.getElementById("modelArea").value;
  fetch('http://localhost:8080/', {
      method: 'post',
      headers: {'Content-Type': 'text/plain'},
      body: model
    })
      .then(response => response.json())
      .then(data => {
        console.log(data);
      }).then(console.log("received!"))     
}  

如果您想在提交表单时触发您的函数,那么您可以使用 HTML 表单上可用的 "onsubmit" 事件侦听器。

所以你会做 onsubmit="initializeUserModel(event)"。您将事件对象传递给它,以便您可以在函数中调用 event.preventDefault() 并停止页面重新加载。

将您的输入更改为 type="submit"(或将其设为 type="submit" 的按钮),否则将不会触发表单提交。

    <form id="modelCodeForm" onsubmit="initializeUserModel(event)">
      <label for="codehere"></label>
      <div id="modelAreaDiv">
        <textarea id="modelArea" cols="60" rows="20">Stuff</textarea>
        <br />
        <input id="submitUserModel" type="submit" value="run on server" />
      </div>
    </form>
  function initializeUserModel(event) {
    event.preventDefault();
    let model = document.getElementById("modelArea").value;
    fetch("http://localhost:8080/", {
      method: "post",
      headers: { "Content-Type": "text/plain" },
      body: model,
    })
      .then((response) => response.json())
      .then((data) => {
        console.log(data);
      })
      .then(console.log("received!"));
  }

我弄清楚了。事实证明,问题是由于 VS Live Server 检测到文件夹中的更改并热加载应用程序造成的。更改是由于后端在同一个文件夹中保存了一个日志。真的很愚蠢的事情...