PHPMailer成功发送邮件,但可以';t返回到$.ajax成功部分
我使用PHPMailer(gmail smtp)从静态网站表单发送电子邮件。问题是,电子邮件已成功发送,但我无法在$.ajax的success:function(result){}部分获得正确的响应,每次都会出现“error:function(err){}” Web服务器: XAMPP(本地主机) 代码如下所示: HTML表单:PHPMailer成功发送邮件,但可以';t返回到$.ajax成功部分,php,jquery,ajax,callback,phpmailer,Php,Jquery,Ajax,Callback,Phpmailer,我使用PHPMailer(gmail smtp)从静态网站表单发送电子邮件。问题是,电子邮件已成功发送,但我无法在$.ajax的success:function(result){}部分获得正确的响应,每次都会出现“error:function(err){}” Web服务器: XAMPP(本地主机) 代码如下所示: HTML表单: <div id="contactus-form"> <form id="contactUs" method="post">
<div id="contactus-form">
<form id="contactUs" method="post">
<p>
<label for="name">Name:</label>
<input type="text" id="name" class="formbox" name="name"/>
</p>
<p>
<label for="email">Email:</label>
<input type="email" id="email" class="formbox" name="email"/>
</p>
<p>
<label for="comments">Comments:</label>
<textarea name="comments" id="comments" rows="8"></textarea>
</p>
<p>
<button form="contactUs" name="send" id="send" type="submit">Send Message</button>
</p>
</form>
</div>
PHP:
若要验证,请替换php的最后一部分,其中您可以通过以下方式检查错误:
if(!$mail->send())
$result = "Error";
else
$result = "Success";
并在js中插入关于成功和错误的stringify警报。从成功中的一个开始,然后从成功中删除一个,并尝试错误中的相同操作
alert(JSON.stringify(result));
alert(JSON.stringify(err));
如果验证时出现问题,您将首先看到。我可能错了,但我认为这是因为那一部分。如果你再次错误地获得成功,那是来自其他地方
我希望它能对您有所帮助。要验证,请替换php的最后一部分,您可以通过以下方式检查错误:
if(!$mail->send())
$result = "Error";
else
$result = "Success";
并在js中插入关于成功和错误的stringify警报。从成功中的一个开始,然后从成功中删除一个,并尝试错误中的相同操作
alert(JSON.stringify(result));
alert(JSON.stringify(err));
如果验证时出现问题,您将首先看到。我可能错了,但我认为这是因为那一部分。如果你再次错误地获得成功,那是来自其他地方
我希望它能对你有所帮助。你的关键价值在于给予“地位”,但我认为关键价值在于“成功”
您的代码:
$result = array('status'=>"success", 'message'=>"Message sent.");
替换为:
$result = array('success'=>"successfully send", 'message'=>"Message sent.");
方法2:
而上述解决方案不起作用,那么另一种方法就是这样。我正在用这个
echo json_encode(array('success' => true, 'result' => "You contact information has been sent"));
得到这样的结果:
success: function (response) {
console.log(response);
if(response.success)
jQuery('#success').html(response.result).show();
else
jQuery('#error').html(response.result).show();
},
我对此不确定,但试试看。我希望是有用的你的关键价值是给予“地位”,但我认为关键价值是“成功”
您的代码:
$result = array('status'=>"success", 'message'=>"Message sent.");
替换为:
$result = array('success'=>"successfully send", 'message'=>"Message sent.");
方法2:
而上述解决方案不起作用,那么另一种方法就是这样。我正在用这个
echo json_encode(array('success' => true, 'result' => "You contact information has been sent"));
得到这样的结果:
success: function (response) {
console.log(response);
if(response.success)
jQuery('#success').html(response.result).show();
else
jQuery('#error').html(response.result).show();
},
我对此不确定,但试试看。我希望使用ful问题是我没有阻止默认的提交功能
解决方案1:添加返回false提交功能结束时的代码>
$('#contactUs').submit(function() {
...
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
return false;
});
$('#contactUs').submit(function(e) {
...
e.preventDefault();
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
});
解决方案2:在提交函数中添加event.preventDefault()
$('#contactUs').submit(function() {
...
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
return false;
});
$('#contactUs').submit(function(e) {
...
e.preventDefault();
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
});
在这种情况下,解决方案1和解决方案2之间没有区别。但是,如果您不想同时阻止事件传播(父元素中的任何相同事件),最好使用event.preventDefault()
。请查收
如果有人能解释为什么没有阻止默认提交会导致$.ajax响应错误,我将不胜感激。问题是我没有阻止默认提交功能
解决方案1:添加返回false提交功能结束时的代码>
$('#contactUs').submit(function() {
...
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
return false;
});
$('#contactUs').submit(function(e) {
...
e.preventDefault();
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
});
解决方案2:在提交函数中添加event.preventDefault()
$('#contactUs').submit(function() {
...
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
return false;
});
$('#contactUs').submit(function(e) {
...
e.preventDefault();
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {...},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
});
在这种情况下,解决方案1和解决方案2之间没有区别。但是,如果您不想同时阻止事件传播(父元素中的任何相同事件),最好使用event.preventDefault()
。请查收
如果有人能添加更多解释,说明为什么不阻止默认提交会导致$.ajax响应错误,我将不胜感激。请尝试删除此项:
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
它对我有用。尝试删除此项:
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
这对我来说很有用。我通过简单地添加returnfalse提交功能结束时的代码>。不知道为什么。如果有人能给我任何建议,那就太棒了。在浏览器控制台中显示你的html表单和任何错误,并从gmail.php
@Rafee回复。我已经添加了来自gmail.php的错误截图链接。对不起,没有足够的声誉,我无法直接发布图片。第一张图片不起作用,你能尝试在gmail.php中获取错误吗?@Rafee实际上gmail.php中没有错误。我认为问题在于我没有阻止默认的提交功能。添加返回false代码>工作是因为默认提交被阻止。在$('#contactUs')中添加event.preventDefault()
。提交(函数(){}
也在工作。我通过简单地在submit函数的末尾添加return false;
找到了答案。不太清楚为什么。如果有人能给我任何建议,那就太棒了。在浏览器控制台中显示你的html表单和任何错误,并从gmail.php
@Rafee回复我添加了来自gmail.php.Sor的错误截图链接ry没有足够的声誉,我无法直接发布图片。第一张图片不起作用,你能尝试获取gmail.php中的错误吗?@Rafee实际上gmail.php中没有错误。我认为问题是我没有阻止默认提交功能。添加返回false;
工作是因为默认提交被阻止。添加事件.preventedefault()
在$('#contactUs')。submit(function(){}
也在工作。非常感谢您的帮助。但问题是整个请求由于某种原因被取消。无论是“$result='Error'”还是“$result='Success'”已返回。非常感谢您的帮助。但问题是整个请求由于某种原因被取消。未返回“$result='Error'”或“$result='Success'”。非常感谢。如果$mail->send()
return false当调用gmail.php时,它仍然应该返回JS中的success函数,响应为{status:'error',message:'error msg'}
。但是由于某些原因,请求被取消,甚至邮件发送成功。非常感谢。如果$mail->send()
return false当调用gmail.php时,它仍然应该返回JS中的success函数,响应为{status:'error',message:'error msg'}
。但是由于某种原因,即使邮件成功发送,请求也被取消。