我使用PHPMailer(gmail smtp)从静态网站表单发送电子邮件。问题是,电子邮件已成功发送,但我无法在$ .ajax'成功:功能(结果){}'中获得正确的回复。部分,每次进入错误:功能(错误){}'代替。
网络服务器: XAMPP(localhost)
代码如下:
HTML表单:
#standardSQL
WITH table1 AS (
SELECT value
FROM UNNEST([1, 4, 9, 10]) AS value
),
table2 AS (
SELECT chunk.start, chunk.`end`
FROM UNNEST([STRUCT<start INT64, `end` INT64>(0,5),(6,9),(10,15)]) AS chunk
)
SELECT *
FROM `table1` a
INNER JOIN `table2` b
ON a.value BETWEEN b.start AND b.`end`
-- ORDER BY value
JS:
<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:
$('#contactUs').submit(function() {
var message = $("#comments").val();
var name = $('#name').val();
var email = $('#email').val();
$.ajax({
url: "PHPMailer/gmail.php",
method: "POST",
data: {
name: name,
email: email,
message: message
},
dataType: "json",
success: function(result) {
console.log(result);
},
error: function(err) {
console.log(err);
}
});
});
我也为gmail.php添加了<?php
header('Content-Type: application/json');
require 'PHPMailerAutoload.php';
//Get data send by ajax
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
$mail->Host = gethostbyname('ssl://yoursmpt.com');
$mail->Port = ***;
$mail->SMTPSecure = 'ssl';
$mail->SMTPAuth = true;
$mail->Username = "youraccount@email.com";
$mail->Password = "yourpassword";
$mail->setFrom("from@email.com", "from name");
$mail->addReplyTo($email, $name);
$mail->addAddress('admin@yourdomail.com', 'Admin');
$mail->Subject = 'Message From Website';
$mail->msgHTML('<h4>Name: </h4>'.$name.'<br>'.'<h4>Email: </h4>'.$email.'<br>'.'<h4>Message: </h4>'.$message);
$mail->AltBody = 'This is a plain-text message body';
//send the message, check for errors
if (!$mail->send()) {
$result = array('status'=>"error", 'message'=>"Mailer Error: ".$mail->ErrorInfo);//
echo json_encode($result);
} else {
$result = array('status'=>"success", 'message'=>"Message sent.");
echo json_encode($result);
}
。
当我点击&#34; SendMessage&#34;按钮,我收到了取消请求:
如果我在submit()函数结束时添加header('Content-Type: application/json');
,它在本地工作正常。任何人都可以帮我弄清楚在这种情况下发生的事情,请?非常感谢你。
答案 0 :(得分:0)
验证,替换你的php的最后一部分,你在那里检查错误:
if(!$mail->send())
$result = "Error";
else
$result = "Success";
并在js中插入成功和错误的字符串化警报。从成功中删除一个并尝试相同的错误后,从一个成功开始。
alert(JSON.stringify(result));
alert(JSON.stringify(err));
如果您在验证时出现问题,首先会看到。我可能是错的,但我认为它来自那一部分。如果你再次收到错误的成功,那就来自其他地方。
我希望它会对你有所帮助。
答案 1 :(得分:0)
你的关键价值是给予&#34;状态&#34;但我认为关键价值是成功&#34;。
您的代码:
$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();
},
我不确定这一点但只是尝试一下。我希望用得好吗
答案 2 :(得分:0)
问题是我没有阻止默认的提交功能。
解决方案1:在提交功能结束时添加return 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;
});
解决方案2:在提交功能
中添加event.preventDefault()$('#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);
}
});
});
在这种情况下,Solution1和Solution2之间没有区别。但是,如果您不想也阻止事件传播(父元素中的任何相同事件),最好使用event.preventDefault()
。请检查https://css-tricks.com/return-false-and-prevent-default/。
如果有人可以添加更多解释,为什么不阻止默认提交会导致$ .ajax响应错误,我将不胜感激。
答案 3 :(得分:0)
尝试删除它:
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
它对我有用。