使用Ajax发出POST请求

Making POST request using Ajax

本文关键字:请求 POST 发出 Ajax 使用      更新时间:2023-09-26

我想发送电子邮件到我的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


这是表单

的html
    <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();