我有一个CGI python脚本,它向一个AJAX请求中指定的帐户发送一封电子邮件(取自表单)。
def getEmail():
parameter = cgi.FieldStorage()
a = parameter.getvalue('email')
sent_from = gmail_user
SUBJECT = "Thanks"
TEXT = "Hey"
message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(gmail_user, gmail_password)
server.sendmail(sent_from, a, message)
server.close()
if __name__ == "__main__":
getEmail()
收到:
<script type = "text/javascript">
$(function()
{
$('#regbut').click(function(){
alert('Im going to start processing');
$.ajax({
url: "/cgi-bin/register.py",
type: "post",
data: $("#frm").serialize(),
success: function(data){
alert("Well done boyo");
},
error: function (response) {
console.log(response);
}
});
});
});
</script>
这个脚本实际上有效。它将电子邮件发送到输入的位置。然而,AJAX从未接受它成功 - 警报永远不会消失。事实上,我在错误区域输入了警报,而是激活了警报。 Console.log(响应)产生此错误:
Object { readyState: 0, getResponseHeader: .ajax/y.getResponseHeader(), getAllResponseHeaders: .ajax/y.getAllResponseHeaders(), setRequestHeader: .ajax/y.setRequestHeader(), overrideMimeType: .ajax/y.overrideMimeType(), statusCode: .ajax/y.statusCode(), abort: .ajax/y.abort(), state: .Deferred/e.state(), always: .Deferred/e.always(), catch: .Deferred/e.catch(), 8 more… }
但我无法找出这意味着什么。任何帮助将不胜感激。
(这通过localhost在apache服务器上运行,如果这很重要的话)
答案 0 :(得分:0)
似乎问题与设置异步有关。不设置异步意味着程序立即出错 - 我假设是因为它没有等待脚本完成执行。因此,添加async: false
可解决问题:
$(function()
{
$('#regbut').click(function(){
alert('Im going to start processing');
$.ajax({
url: "/cgi-bin/register.py",
type: "post",
data: $("#frm").serialize(),
async: false,
success: function(data){
alert("Well done boyo");
},
error: function (response) {
console.log(response);
}
});
});
});
但是,这会导致另一个问题,因为async:false已被弃用,但就目前而言,我看不到另一种解决方法。