2017-04-16 61 views
0

我有一个CGI python脚本发送电子邮件到AJAX请求中指定的帐户(从表单中获取)。AJAX链接cgi python脚本完成,但仍然返回错误

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… } 

但我找不到这是什么意思。任何帮助将不胜感激。

(这是通过本地主机Apache服务器上所有正在运行,如果该事项)

回答

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); 
      }   
    }); 
}); 
}); 

然而,这会导致另一个问题,在异步:假已被弃用,但现在,我看不出这个固定的另一种方式。

相关问题