修改
我不认为我的问题符合复制条件(对我这样的非专业用户来说并不明显)。无论哪种方式,让我澄清我需要什么,以及我目前的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=...)
我不知道这是否是一个很好的方法,甚至安全。
在这个简单的例子中,脚本会监听&#39;粘贴&#39; (ctrl + v)事件,然后将其路由到flask / python函数。但由于某种原因,最后一次render_template调用永远不会被执行。
html&amp;的JavaScript
<body>
Press Ctrl+V (page must be focused)
<br /><br />
{%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>
瓶/蟒
@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??
终端上的输出通过&#39; POST&#39;确认一切顺利。
* 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 -
但最后一次&#39; All Done&#39;永远不会显示在页面上。我无法理解这里会发生什么。