Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS单击事件上在Flask中呈现_模板_Javascript_Jquery_Python_Ajax_Flask - Fatal编程技术网

Javascript 在JS单击事件上在Flask中呈现_模板

Javascript 在JS单击事件上在Flask中呈现_模板,javascript,jquery,python,ajax,flask,Javascript,Jquery,Python,Ajax,Flask,我试图通过单击按钮来调用Flask中的函数。单击按钮时,将运行以下脚本 JS $("#load_btn").click(function() { $.get("/callback"); } 烧瓶 @app.route('/callback') def callback(): print('called') ... # code here that needs to run before rendering callback return render_templ

我试图通过单击按钮来调用Flask中的函数。单击按钮时,将运行以下脚本

JS

$("#load_btn").click(function() {
    $.get("/callback");
}
烧瓶

@app.route('/callback')
def callback():
    print('called')
    ... # code here that needs to run before rendering callback
    return render_template('callback.html')

这里的问题是,
调用的
被打印,并且
GET/callback HTTP/1.1200
也被记录,但是
callback.html
没有被呈现-页面保持不变。我猜这可能不是解决这个问题的最佳方法,但如果是这样,推荐的方法是什么?

$。get
只向服务器发送一个HTTP请求,但实际上不处理从服务器返回的数据(在您的情况下,渲染模板)

试着这样做:

$("#load_btn").click(function() {
    $("html").load("/callback");
}
或者,如果渲染的模板不包含任何
标记,则可以只包含正文内容

$("#load_btn").click(function() {
    $("body").load("/callback");
}
或者,您可以将“body”替换为特定元素,以仅替换页面的特定部分

如果要重定向用户,请执行以下操作:

$("#load_btn").click(function() {
    window.location = "/callback";
}

这将替换当前页面中的内容。我希望用户被重定向到mysite.com/callback,并为该页面呈现
callback.html
,如果这有意义的话。我之所以通过flask应用程序将其发送回去,而不是直接在HTML中加载它,是因为我需要在回调中运行一个函数。我已经更新了我的应答谢谢,这改变了url,但它仍然不能解决我的问题。我正在寻找在执行
回调
方法中的代码后发生重定向(我在我的原始帖子中用
表示)。是的,这就是发生的情况。当用户单击
#load_btn
元素时,将调用单击处理程序,该处理程序将更改url。浏览器从服务器获取此url的内容。然后,运行
回调
函数中的任何代码。然后,呈现模板,并将响应发送到浏览器http是一个基于请求和响应的非常简单的协议。因此,当用户转到
/callback
时,回调函数只能发送一个响应。有两种方法,但最简单的方法是让
回调
函数在后台线程中运行长期运行的任务,然后立即返回包含进度条的响应模板。然后,该页面需要向服务器发送请求(使用
$.get
)以请求进度。您可以创建一个类似于
/callback\u progress
的烧瓶路由来返回此信息。