javascript - Form vs Fetch API不呈现重定向页面js
问题描述
我有一个按钮,点击后对 /portal 进行 fetch POST 调用。
portalButton.click(function () {
console.log(customerID);
fetch("/portal", {
method: "POST", redirect: 'follow', mode: 'cors',
body: JSON.stringify({ customer: customerID }),
})
});
我有一个简单的 Express /portal 端点,它重定向到另一个 URL,比如 google.com,
app.post("/portal", async (req, res) => {
res.redirect("https://google.com");
});
单击该按钮,我收到如下错误,并且页面未重定向。
Access to fetch at 'https://google.com/' (redirected from 'http://localhost:4242/portal') from origin 'http://localhost:4242' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
但是,如果我在表单中有按钮,则不会出现 cors 错误,并且页面已成功重定向。
<form name="myForm" action="/portal" method="post">
<input type="submit" value="Submit">
</form>
问题:
- 在这种情况下,form post 和 fetch post 有什么区别?(是的,我确实阅读了 fetch API 文档)
- 为什么只有在我进行 fetch 调用而不是在我进行表单调用时才会收到 CORS 错误 - 它们不是都从不同的资源请求数据(重定向)吗?
谢谢!
解决方案
在这种情况下,form post 和 fetch post 有什么区别?
提交表单导致浏览器导航到新 URL。
fetch
返回要由 JavaScript 处理的数据,而不会导致浏览器导航(尽管您不会对 的返回值做任何事情fetch
)。
为什么只有在我进行 fetch 调用而不是在我进行表单调用时才会收到 CORS 错误 - 它们不是都从不同的资源请求数据(重定向)吗?
CORS 旨在保护用户和网站 A 之间应由网站 B 上运行的 JavaScript 访问的私有数据。
如果 JavaScript 一开始就没有参与,那是不可能发生的。
推荐阅读
- ansible - Ansible 将内容从 stdout_lines 复制到文件中并且格式完全改变
- java - 如何将整数列表的所有值放在Java的唯一变量上
- python - 来自 scipy.optimize 的 fsolve 失败
- ssh - SSH 权限被拒绝(公钥)。使用私有 SSH 密钥时
- sql - 选择中的 SQL 选择语句以删除重复项
- firebase - Paypal onApproved 方法,不会运行我的保存到 Firebase 功能
- go - golang 快速替代 memcpy
- google-apps-script - 用于匹配列值和复制数据的脚本
- grafana - 编写 grafana 警报条件
- visual-studio-code - 当我单击侧边栏上的任意位置时,停止 VS Code 侧边栏折叠文件夹