我目前正在使用Flask
创建网站,并遇到了一个有趣的问题。有一些代码为用户提供了输入大约20个单独输入字段的值的选项。我想要做的是构建一个按钮,允许用户粘贴Excel表格中的列。本质上,一个按钮将查看剪贴板,获取字段,将字符串转换为数组,并按照它们在列表中出现的顺序将值放入每个input
。
到目前为止,我已经能够使用tk.Tk().clipboard_get()
将剪贴板转换为字符串,并相信我可以通过制作XMLHttpRequest
来获取此值,但实际上却没有运气工作。
我想要完成的一些代码:
的Python:
@app.route('/some/path/here', methods = ['GET'])
def paste():
try:
values = tk.Tk().clipboard_get()
values = values.replace('\n',',')
return values
except:
return None
HTTP:
<button type="button" style="float: right" onclick="Testing()">Paste</button>
<p id="textHere"></p>
JavaScript的:
<script>
function Testing() {
var wvpst = new XMLHttpRequest();
wvpst.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200) {
var list = this.responseXML;
// list = list.replace(/'/g,"").replace(/ '/g,"");
// list = list.split(", ");
document.getElementById("textHere").innerHTML = list;
}
}
wvpst.open("GET","{{ url_for('paste') }}",true);
wvpst.send();
}
</script>
目前,我只是想从Excel工作表中获取复制的值列表,但按下按钮时没有返回任何内容。我是否只是错误地使用XMLHttpRequest
或者我还需要做些什么才能让它发挥作用?
答案 0 :(得分:0)
在
中设置调试断点if (this.readyState == 4 && this.status == 200) {
}
并检查您的回复。在Flask中的函数的第一行设置另一行。这些应该可以让您了解故障的位置。
其他一些,也许更重要的说明:
要点1)在你的烧瓶试试/除外,失败时你应该提供一个响应,只有500响应。将返回None替换为:
return app.make_response('Couldn't parse clipboard information!'), 500
第2点)无需将此信息传递给服务器进行处理。您可以在前端的javascript中完成此操作,并为您的服务器保存一些处理,并让您的客户端等待HTTP响应。
让用户将其内容粘贴到文本框或其他元素中,然后从那里访问该值。
直接剪贴板访问不是大多数浏览器自由放弃的,因此最好避免使用该路径。
要点:
你的xmlhttprequest看起来很好。我猜你的烧瓶尝试失败了,如果有的话,还有一些无用的东西。
在javascript中执行此操作。