Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPMailer成功发送邮件,但可以';t返回到$.ajax成功部分_Php_Jquery_Ajax_Callback_Phpmailer - Fatal编程技术网

PHPMailer成功发送邮件,但可以';t返回到$.ajax成功部分

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">

我使用PHPMailer(gmail smtp)从静态网站表单发送电子邮件。问题是,电子邮件已成功发送,但我无法在$.ajax的success:function(result){}部分获得正确的响应,每次都会出现“error:function(err){}”

Web服务器: XAMPP(本地主机)

代码如下所示:

HTML表单:

<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'}
。但是由于某种原因,即使邮件成功发送,请求也被取消。