Edit
我不认为我的问题符合重复(对于像我这样的外行用户来说并不明显) . 无论哪种方式,让我澄清我需要什么,以及我目前的kludgy解决方案 .

  • 用户事件(ctrl v)使用“POST”方法将数据发送到服务器 . 我使用ajax的唯一原因是从剪贴板中获取粘贴的图像 .

  • 在服务器上,flask / python函数读取数据,最终以render_template('index.html',results = func(request.form))的形式显示结果

当然这不是那么棘手 . 从下面的评论我想出了一个makedo解决方案 . ajax发布到服务器,python将数据保存到文件,将 filename 返回给ajax . 修改ajax中的 done 函数以重定向到包含文件名的url .

done(function(filename) {
        window.location.href = "/scan/"+filename;
        });

最后我有一条路线

@app.route('/scan/<filename>',methods=['POST']) 
def somefunc(filename):
    #stuff
    return render_template("index.html",results=...)

我不知道这是否是一个很好的方法,甚至安全 .

原帖

在这个简单的示例中,脚本侦听'paste'(ctrl v)事件,然后将其路由到flask / python函数 . 但由于某种原因,最后一次render_template调用永远不会执行 .

html & javascript

<body>
Press Ctrl+V (page must be focused)


{%if msg %} {{ msg }} {% endif %} <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type=text/javascript> //Listen for a Ctr+V event document.addEventListener('paste', function (e) {send_data(e);},false); send_data = function (e) { var fd = new FormData(); fd.append('data', "Mytest"); $.ajax({ type: 'POST', url: '/pastetest', data: fd, processData: false, contentType: false }).done(function() { console.log('sent to server'); }); e.preventDefault(); }; </script> </body>

Flask/python

@app.route('/')
def index():
    print("yo")
    return render_template('paste4.html',msg="Waiting")

@app.route('/pastetest',methods=['POST']) 
def image_upload():
    print("On the server")
    print(request.form)
    return render_template('paste4.html',msg="All Done") #<-- Doesn't execute??

终端上的输出确认“POST”一切顺利 .

* Serving Flask app "pasteapp"
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
yo
127.0.0.1 - - [06/Nov/2017 21:25:37] "GET / HTTP/1.1" 200 -
On the server
ImmutableMultiDict([('data', 'Mytest')])
127.0.0.1 - - [06/Nov/2017 21:25:42] "POST /pastetest HTTP/1.1" 200 -

但最后一次“全部完成”从未显示在页面上 . 我只是无法理解这里发生了什么 .