html - 为什么在使用 Angular 的 http.post 而不是传统的 HTML 表单时会出现 CORS 错误?
问题描述
我有一个用于捕获表单提交数据的Eloqua 帐户。我目前有一个非常简单的表单,它只有一个用户输入字段。
按照 Eloqua 的文档,我已通过执行以下操作成功发布到他们的服务器。
<body>
<form action="https://sXXXXXXXX.t.eloqua.com/e/f2" method="POST">
<input type="text" name="name">
<input type="hidden" name="elqFormName" value="myForm" id="eloquaFormName">
<input type="hidden" name="elqSiteID" value="XXXXXXXXXXX">
<input type="hidden" name="elqCustomerGUID" value="">
<input type="hidden" name="elqCookieWrite" value="0">
<button type="submit">Submit</button>
</form>
</body>
这成功地 POST 到 Eloqua 的服务器并捕获数据。
我现在遇到的问题是我想将此表单集成到一个角度项目中。所以我的组件 html 看起来像这样
<form [formGroup]="user_form_data" (ngSubmit)="onSubmit($event)">
<input type="text" name="name" [formControl]="q1" required minlength="4" id="">
<input type="hidden" name="elqFormName" value="myForm" id="eloquaFormName">
<input type="hidden" name="elqSiteID" value="XXXXXXXXXXX">
<input type="hidden" name="elqCustomerGUID" value="">
<input type="hidden" name="elqCookieWrite" value="0">
<button type="submit">Submit</button>
</form>
这是打字稿中的提交功能。
首先我注入 HttpClient
private http: HttpClient
然后我确保它是有效的
onSubmit() {
if (this.user_form_data.valid === true) {
this.postForm();
}
else {
console.log('not valid!');
}
}
然后我发布它
postForm() {
console.log('Attempting to post form!');
this.http.post('https://sXXXXXXXX.t.eloqua.com/e/f2', {
'name': 'TEST NAME',
'elqFormName': 'myForm',
'elqSiteID': 'XXXXXXXXX',
'elqCustomerGUID': '',
'elqCookieWrite': '0'
}).subscribe(
data => {
console.log('Post was successful: ', data);
},
error => {
console.log('Error: ', error);
}
);
}
但这失败并出现以下错误。
跨域请求被阻止:同源策略不允许在https://sXXXXXXXXX.t.eloqua.com/e/f2读取远程资源。(原因:CORS 请求没有成功)
我感到困惑的是为什么常规前端表单从 localhost:3000 提交绝对没有问题(因为我总是运行 lite-server)而不是从 localhost:4200 (我的角度服务器编号)提交。另外,当我只是发布数据而不是使用 GET 时,为什么需要读取远程资源。
从普通 HTML 表单发布与使用 Angular 的 http 客户端发布不同吗?我该如何解决这个问题?
解决方案
$.ajax({
url: "<endpoint>",
dataType: "jsonp",
contentType:"application/json"
success: function(result) {
console.log(result); // server response
}
});
推荐阅读
- squid - 具有多个虚拟 IP 的 Squid 代理集群
- javascript - Bootstrap Vue perPage for custom columns or rows
- themes - 如何更改 Contempo Blogger 主题中的文本?
- dart - OverflowBox,溢出的部分无法响应按钮?
- django - 找不到满足django要求的版本(来自版本:)没有为django找到匹配的发行版
- python - 非侵入式 conda 安装
- python - 将字典值从 1D 重塑为 2D 数组
- docker - 将数据从 ssh 服务器复制到 ssh 服务器 docker
- dataframe - 在过滤器和 GroupBy 计算期间在 PySpark 中出现内存错误
- c - 为什么我的二维 int segfault 数组带有 malloc?