簡體   English   中英

發布請求后如何防止重新加載?

[英]How prevent reload after post request?

我正在嘗試向服務器發出發布請求並對響應做一些事情。 事情似乎在服務器端起作用。 問題是頁面在響應完成后重新加載,我無法對響應做任何事情。

常見的建議是使用buttonpreventDefault 這些建議並不能解決問題:正如您在下面看到的,輸入類型是button (不是submit )並且 event 上的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!"))     
}  

我明白了這一點。 事實證明,問題是由於 VS Live Server 檢測到文件夾中的更改並熱加載應用程序造成的。 更改是由於后端在同一文件夾中保存日志。 錯過真的很傻...

如果您想在提交表單時觸發 function,那么您可以使用 HTML forms 上可用的“onsubmit”事件偵聽器。

所以你會做onsubmit="initializeUserModel(event)" 您將事件 object 傳遞給它,這樣您就可以在 function 中調用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!"));
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM