【发布时间】:2018-01-30 17:20:21
【问题描述】:
我遇到需要提交表单的情况。 当我使用这种方法时 1
Method 1
<form action="my_redirect_url" method="post" onSubmit={this.registerEmail.bind(this)}>
<input
type="text"
placeholder='Email address'
name='EMAIL'
value={this.state.email}
onChange={this.handleChangeEmail}
/>
<button type='submit' />
</form>
然后表单完美提交,但我错过了表单验证,即电子邮件验证部分。无论是否有效,表单都会重定向
Method 2
// onSubmit method
registerEmail = (e) => {
e.preventDefault();
let { email } = this.state;
let emailValidated = validateEmail(email);
if (emailValidated) {
fetch('my_redirect_url', {
method: 'post',
body : JSON.stringify({
EMAIL: email
}),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
})
.then(ParseJSON) // It parses the output
.catch(function(error) {
console.log("error---", error)
});
} else {
alert("invalid email")
}
}
// Form
<form onSubmit={this.registerEmail.bind(this)}>
<input
type="text"
placeholder='Email address'
name='EMAIL'
value={this.state.email}
onChange={this.handleChangeEmail}
/>
<button type='submit' />
</form>
在方法 2 中,验证已正确完成,但随后它不会重定向并显示错误 Fetch api cannot load 'my_redirect_url' Response for preflight is invalid (redirect)
那么问题是什么以及如何解决?
【问题讨论】:
-
您缺少获取 API 的
then部分。fetch不知道如何处理响应对象。 -
我会修改代码。我也有
.then部分 -
@iamsaksham API 是否属于同一个服务器?
-
正如错误所说,服务器未能满足您的预检请求。您是否通过浏览器的文件协议提供此文件:例如:
file:///path/to/my/file.html? -
@iamsaksham 有两种方法可以解决这个问题 1. 在
https://xyz/abc.php上,为传入请求启用 CORS 标头,并在您从 fetch api 发送的请求中添加 CORS 标头。 2. 添加一个 nginx 或服务器重定向,它将所有带有子路由的请求传递到https://xyz/abc.php。例如,您将在浏览器中点击localhost:3000/my_api,然后nginx 会将所有/my_api 请求重定向到https://xyz/abc.php。通过这种方式,您的客户可以访问自己的域 Id 建议使用第二个。
标签: javascript forms reactjs