2017-04-16 113 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); 
      }   
    }); 
}); 
}); 

然而,這會導致另一個問題,在異步:假已被棄用,但現在,我看不出這個固定的另一種方式。

相關問題