iam*_*ham 6 javascript forms reactjs
我遇到需要提交表格的情况。当我使用这种方法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>
Run Code Online (Sandbox Code Playgroud)
然后,表单提交完美,但是我错过了表单验证,即电子邮件验证部分。其有效与否,该表单重定向
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>
Run Code Online (Sandbox Code Playgroud)
在方法2中,验证已正确完成,但随后没有重定向并显示错误消息 Fetch api cannot load 'my_redirect_url' Response for preflight is invalid (redirect)
那么问题是什么,如何解决呢?
如果您告诉程序e.preventDefault(),那么他将不会执行我们都在等待的正常重定向。
因此,反之亦然,您必须将其删除才能在之后重定向用户。仅preventDefault()当电子邮件不正确时。