post 请求后如何防止重新加载?
How prevent reload after post request?
我正在尝试向服务器发出 post 请求并对响应进行处理。事情似乎在服务器端有效。问题是页面在响应完成后重新加载,我无法对响应执行任何操作。
常见的建议是使用 button
或 preventDefault
。这些建议没有解决问题:正如您在下面看到的,输入类型是 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 检测到文件夹中的更改并热加载应用程序造成的。更改是由于后端在同一个文件夹中保存了一个日志。真的很愚蠢的事情...
我正在尝试向服务器发出 post 请求并对响应进行处理。事情似乎在服务器端有效。问题是页面在响应完成后重新加载,我无法对响应执行任何操作。
常见的建议是使用 button
或 preventDefault
。这些建议没有解决问题:正如您在下面看到的,输入类型是 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 检测到文件夹中的更改并热加载应用程序造成的。更改是由于后端在同一个文件夹中保存了一个日志。真的很愚蠢的事情...