我正在尝试使用 fetch
进行简单的发布请求:
const headers = new Headers({
Accept: 'application/json',
'Content-Type': 'application/json',
});
fetch('/checkout/billing', {
headers,
body,
credentials: 'include',
method: 'POST',
})
.catch(console.error);
服务器端端点如下所示:
if (!validateResult) {
res.redirect('/checkout/shipping');
} else {
view.render('checkout/billing')
}
因此,当我使用常规 HTML 表单提交时,它工作正常(重定向或渲染),但是当我使用 fetch
而不是重定向或渲染时,我收到 HTML 正文作为响应,就像 if我会使用 res.send(html)
,知道什么会导致这个问题吗?
最佳答案
TL;DR:它应该按照规范向您发送 HTML。
<小时/>您期望来自客户端的 JSON,但您要求呈现 HTML 的路径,这就是您获得 HTML 的原因。
渲染这个词可能有点令人困惑:它来自于这样的想法:您有一个模板(可能是 html/pug/mustache/...),您的服务器会将其转换为 html 。但最终,当您渲染时,服务器所做的只是发送最终的 HTML 作为对客户端发出的请求的响应。
因此,如果请求是针对 HTML 中的 View ,则这将按预期工作。但是如果您想要执行 AJAX 请求,那么您将会遇到这种奇怪的行为。
关于javascript - res.render() 和 res.redirect() 的行为类似于 res.send(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45041265/