提问人:Rishikesh Negi 提问时间:10/20/2023 最后编辑:Rishikesh Negi 更新时间:10/20/2023 访问量:46
Flask 函数的 POST 方法在“提交”事件中将从 JavaScript(通过 POST)作为 JSON 接收的变量重置为 None。我怎样才能避免这种情况?
Flask function's POST method is resetting variables received from JavaScript (via POST) as JSON to None on "submit" event. How can I avoid that?
问:
我正在尝试从 flask 路由中的 flask 函数(使用 )的 POST 方法访问 JavaScript 变量,并将其值存储在该 flask 函数的局部变量中。request.get_json()
在 JS 文件中,我使用了一个函数,该函数使用 Ajax 和 jQuery 通过 POST 方法将这些变量发送到该端点。在该模板上发生最终的“submit”事件之前,它被调用。
flask 函数确实接收到正确的值,并按预期将它们存储在这些局部变量中。在“submit”上,flask 函数还会在“submit”事件触发的最终 POST 方法期间通过 POST 从相应的模板获取表单,但保存 JavaScript 变量值的局部变量将重置为“None”。
据我了解,有两个 POST 方法被触发,一个由 Ajax 请求触发,另一个由 flask 中模板的最终“submit”事件触发。在最终的“submit”事件期间,flask 函数不会像在最终的 POST 方法中那样接收 JavaScript 变量,这就是 flask 中的局部变量获取 None 值的原因。我正在尝试做这样的事情:request.content_type
application/x-www-form-urlencoded
烧瓶路线和功能:
@app.route("/foo", methods=["GET", "POST"])
@login_required
def foo():
if request.method == "POST":
def getJsVars():
if request.content_type == 'application/json':
jsVars = request.get_json()
return jsVars
def getX(jsonXY):
if request.content_type == 'application/json':
x = jsonXY['valueX']
return x
def getY(jsonXY):
if request.content_type == 'application/json':
y = jsonXY['valueY']
return y
x = getX(getJsVars())
y = getY(getJsVars())
a = request.form.get('a')
b = request.form.get('b')
# * Code for form validation *
# First, this prints the correct values once,
# but prints again after "submit" with x and y having None value:
print("The values are: " x, " ", y)
return render_template("index.html")
JS代码:
if (window.location.pathname === "/foo") {
let xVal, yVal;
function sendXandY(x, y) {
const valX = x;
const valY = y
$.ajax({
url: '/foo',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
valueX: valX,
valueY: valY,
}),
success: function() {
console.log("OK - 200");
},
error: function(error) {
console.log(error);
},
});
}
function processXandY() {
// x and y get their values here
xVal = 10;
yVal = 20;
// Function call to send x and y to url via POST:
sendXandY(xVal, yVal);
}
document.getElementById("get-xy").addEventListener("click", function ()
{
processXandY();
});
我在烧瓶终端中得到的输出是这样的:
INFO: 127.0.0.1 - - [20/Oct/2023 12:30:02] "GET /static/script.js HTTP/1.1" 200 -
The values are: 10 20
INFO: 127.0.0.1 - - [20/Oct/2023 12:30:04] "POST /foo HTTP/1.1" 200 -
The values are: None None
如何防止局部变量和 flask 函数设置为 None?我是这方面的新手,以前从未尝试过在 JavaScript 和 python/flask 之间建立通信。我试图阅读文档,但无法弄清楚锄头来完成这项工作。任何指导都是值得赞赏的。谢谢。x
y
答: 暂无答案
评论