我的Ajax有问题,我有代码:
const sendForm = function () {
action = 'contact';
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
const getMessageSend = document.querySelector("#messageSend");
getMessageSend.classList.add("message-send");
getMessageSend.innerText = "Thank you for sending an email. You will receive an answer shortly.";
} else {
const getMessageSendError = document.querySelector("#messageSendError");
getMessageSendError.classList.add("message-send");
getMessageSendError.classList.add("message-send-error");
getMessageSendError.innerText = "An error occurred and the email was not sent.";
}
};
xmlhttp.open("post", action, true);
xmlhttp.send();
};
const sendMail = function() {
options.form.addEventListener('submit', function (e) {
e.preventDefault();
let validate = true;
const elementsRequired = document.querySelectorAll(":scope [formHr]");
[].forEach.call(elementsRequired, function(element) {
const type = element.type.toUpperCase();
if (type === 'TEXT') {
if (!validateText(element)) {validate = false;}
}
if (type === 'EMAIL') {
if (!validateEmail(element)) {validate = false;}
}
if (type === 'NUMBER') {
if (!validateNumber(element)) {validate = false;}
}
if (type === 'FILE') {
if (!validateFile(element)) {validate = false;}
}
if (type === 'CHECKBOX') {
if (!validateCheckbox(element)) {validate = false;}
}
});
if (validate) {
sendForm();
} else {
return false;
}
});
};
我的操作文件是正确写入的文件,因为当我删除Ajax并尝试仅使用PHP发送电子邮件时,电子邮件发送正确。
Ajax返回状态200:
POST http://mypage.com/contact [HTTP/1.1 200 OK 231ms]
但是电子邮件没有到达邮箱,我必须在this.submit()
之后添加sendForm()
,然后电子邮件才能正确发送。但是,当我添加this.submit()
时,页面将被重新加载,但是我不希望页面被重新加载。
答案 0 :(得分:1)
问题是双重的:
调用this.submit()时,它实际上是在提交表单(将包含参数)。为了发送ajax请求,您基本上需要从表单中获取值,构造服务器将接受的主体,然后将其发送。