能否使用window.location发起POST HTTP请求?相关实现方案咨询
问题解答
核心疑问回复
window.location 无法发起 POST 请求,对 window.location 赋值会触发浏览器跳转行为,浏览器默认只会以 GET 方式请求目标地址,没有配置请求方法的空间,这就是你收到 Cannot GET /dbinsertupdateditem 报错的直接原因。
可用解决方案
你完全可以通过原生表单提交实现「URL带参数+发送POST请求」的需求,表单的action属性本身就支持携带查询参数,和POST提交方式不冲突,推荐你优先用这个方案:
var form = document.getElementById("update"); document.getElementById("btnsubmit").addEventListener("click", function (e) { // 先阻止默认的表单提交行为 e.preventDefault(); var lp = "1"; // 把需要传递的URL参数拼接到表单的action属性中 form.action = "/dbinsertupdateditem?loadpage=" + encodeURIComponent(lp); // 提交表单,会自动按照表单配置的method发送POST请求 form.submit(); });
如果你的场景需要提交表单后不刷新页面,可以用Fetch API实现异步POST提交:
document.getElementById("btnsubmit").addEventListener("click", async function (e) { e.preventDefault(); const lp = "1"; // 序列化表单所有字段 const formData = new FormData(document.getElementById("update")); try { const response = await fetch("/dbinsertupdateditem?loadpage=" + encodeURIComponent(lp), { method: "POST", body: formData }); // 按需处理提交后的逻辑,比如成功后跳转、提示信息等 if (response.ok) { // 示例:提交成功后跳转到列表页 window.location.href = "/itemlist"; } } catch (error) { console.error("表单提交失败:", error); } });
Express 侧参数接收说明
两种方案下,你都可以正常拿到所有参数:
- URL 携带的
loadpage参数通过req.query.loadpage读取 - 表单内的字段通过
req.body.xxx读取,不需要调整原有路由的参数解析逻辑
内容的提问来源于stack exchange,提问作者NicLovin
相关产品推荐
相关产品推荐

