18910140161

HTML-400在向Flask应用程序中的Ajax数据添加第二个变量时出错-堆栈溢出

顺晟科技

2022-10-19 12:56:36

184

我正在尝试使用Ajax处理我的Flask应用程序中的表单。

以下是我现在拥有的代码:

Flask/Python:

@main.route('/reply/', methods=["GET", "POST"])
def reply():
    if request.method == "POST":

        reply = request.form['reply']
        reply_to_id = request.form['reply_to_id']
        

        if reply:
            now = datetime.now()
            formatted_date = now.strftime("%Y-%m-%d %X")
            reply_to_id = request.form.get("reply_to_id")
            blarg_db.replies.insert({"reply_to_id": reply_to_id, "username": current_user.username, "date": formatted_date, "reply": reply})

            return jsonify({'reply': reply})

    return redirect(url_for('main.home'))

Ajax:

@main.route('/reply/', methods=["GET", "POST"])
def reply():
    if request.method == "POST":

        reply = request.form['reply']
        reply_to_id = request.form['reply_to_id']
        

        if reply:
            now = datetime.now()
            formatted_date = now.strftime("%Y-%m-%d %X")
            reply_to_id = request.form.get("reply_to_id")
            blarg_db.replies.insert({"reply_to_id": reply_to_id, "username": current_user.username, "date": formatted_date, "reply": reply})

            return jsonify({'reply': reply})

    return redirect(url_for('main.home'))

HTML:

@main.route('/reply/', methods=["GET", "POST"])
def reply():
    if request.method == "POST":

        reply = request.form['reply']
        reply_to_id = request.form['reply_to_id']
        

        if reply:
            now = datetime.now()
            formatted_date = now.strftime("%Y-%m-%d %X")
            reply_to_id = request.form.get("reply_to_id")
            blarg_db.replies.insert({"reply_to_id": reply_to_id, "username": current_user.username, "date": formatted_date, "reply": reply})

            return jsonify({'reply': reply})

    return redirect(url_for('main.home'))

在代码原样的情况下,我总是得到一个400 Bad Request错误,但是当我移除AJAX代码数据部分中的第二个变量时,就可以工作了:

@main.route('/reply/', methods=["GET", "POST"])
def reply():
    if request.method == "POST":

        reply = request.form['reply']
        reply_to_id = request.form['reply_to_id']
        

        if reply:
            now = datetime.now()
            formatted_date = now.strftime("%Y-%m-%d %X")
            reply_to_id = request.form.get("reply_to_id")
            blarg_db.replies.insert({"reply_to_id": reply_to_id, "username": current_user.username, "date": formatted_date, "reply": reply})

            return jsonify({'reply': reply})

    return redirect(url_for('main.home'))

如何将两个变量都添加到AJAX数据中并避免此错误?


顺晟科技:

我不明白为什么第二个变量会引发错误。 因为我认为您可以简化代码,所以我将给出以下示例。

@main.route('/reply/', methods=["GET", "POST"])
def reply():
    if request.method == "POST":

        reply = request.form['reply']
        reply_to_id = request.form['reply_to_id']
        

        if reply:
            now = datetime.now()
            formatted_date = now.strftime("%Y-%m-%d %X")
            reply_to_id = request.form.get("reply_to_id")
            blarg_db.replies.insert({"reply_to_id": reply_to_id, "username": current_user.username, "date": formatted_date, "reply": reply})

            return jsonify({'reply': reply})

    return redirect(url_for('main.home'))

我建议使用表单的submit事件。

所有表单数据都使用name属性进行序列化,然后使用Ajax进行传输。在服务器端,可以使用名称请求这些值。

若要禁止某些字段的显示,应使用类型为“hidden”的字段。

@main.route('/reply/', methods=["GET", "POST"])
def reply():
    if request.method == "POST":

        reply = request.form['reply']
        reply_to_id = request.form['reply_to_id']
        

        if reply:
            now = datetime.now()
            formatted_date = now.strftime("%Y-%m-%d %X")
            reply_to_id = request.form.get("reply_to_id")
            blarg_db.replies.insert({"reply_to_id": reply_to_id, "username": current_user.username, "date": formatted_date, "reply": reply})

            return jsonify({'reply': reply})

    return redirect(url_for('main.home'))

通过这种方式,您可以轻松地传输所有值。

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航