我想发送电子邮件到我的flask服务器使用Ajax,但它不工作。下面是我的代码。
脚本:
<script type="text/javascript">
$(document).ready(function(){
var email = "";
$("#letter").on("click",function(){
email = $("letterEmail").val();
$.ajax({
type: 'POST',
url: '/letters',
data: JSON.stringify({Email: email}),
contentType: 'application/json;charset=UTF-8'
});
$("#lettersForm").html("Sent");
console.log(email.toString());
});
});
</script>
Python视图处理:
@app.route("/letters", methods = ['POST'])
def letters():
email = request.json['Email']
send_email("myemail@example.com","Email",str(email))
return True
这是表单
<form id = "lettersForm">
<div class="row uniform 50%">
<div class="8u 12u(mobilep)">
<input type="email" name="email" id="letterEmail" placeholder="Email Address" />
</div>
<div class="4u 12u(mobilep)">
<input id = "letter" type="submit" value="Sign Up" class="fit" />
</div>
</div>
</form>
问题是数据没有从客户端发送。
所以我在服务器端也得到一个KeyError
。
请帮。
KeyError
是由于Flask没有找到密钥。注意,如果stringify发现一个空的email变量,它将不会自动在邮件中包含该键。
同时,不要直接使用request.json
,而要使用request.get_json()
。
客户端问题在这一行:
email = $("letterEmail").val();
它将尝试获取页面中任何具有tagName letterEmail
的元素,我认为你没有。
可能,你在这里要做的是通过它的ID获取元素:
email = $("#letterEmail").val();