AJAX链接cgi python脚本完成,但仍返回错误

时间:2017-04-16 23:57:45

标签: jquery python ajax cgi

我有一个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服务器上运行,如果这很重要的话)

1 个答案:

答案 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已被弃用,但就目前而言,我看不到另一种解决方法。